C#图像处理 如何使用内存法将彩色图像转换为灰度图像并保存到picturebox中!!!

问题描述

C#图像处理我先打开一幅彩色图像到picturebox中,然后我想用内存法将这幅彩色图像(已经在picturebox)转换为灰度图像,并显示在同一个picturebox中请问这怎么实现?(现在我可以进行打开一幅图片,将图片显示到picturebox中,以及我明白内存法的原理,但就是不能将图片用内存法转换为灰度图像并显示在picturebox中)

解决方案

解决方案二:
什么是内存法?
解决方案三:
图像处理中我看资料的时候,上面提及C#图像处理的3种方法,一是提取像素法二是内存法三是指针法,这三种方法处理图像的速度不同,提取像素法速度最慢,指针法最快。我现在可以用提取像素法做到图像在picturebox中的处理,但是用内存法不行
解决方案四:
引用1楼xuzuning的回复:

什么是内存法?

图像处理中我看资料的时候,上面提及C#图像处理的3种方法,一是提取像素法二是内存法三是指针法,这三种方法处理图像的速度不同,提取像素法速度最慢,指针法最快。我现在可以用提取像素法做到图像在picturebox中的处理,但是用内存法不行
解决方案五:
引用1楼xuzuning的回复:

什么是内存法?

我自己解决啦谢谢你~~!!
解决方案六:
使用指针最快,也很方便
解决方案七:
publicstaticBitmapGetDarkImage(BitmapbmpSrc){Bitmapbmp=bmpSrc.Clone(newRectangle(0,0,bmpSrc.Width,bmpSrc.Height),PixelFormat.Format24bppRgb//以24位图像作为处理);BitmapDatabmpData=bmp.LockBits(//锁定位图newRectangle(0,0,bmp.Width,bmp.Height),ImageLockMode.ReadWrite,bmp.PixelFormat);//计算大小注意后面不是width因为会内存中系统会补齐byte[]byColorInfo=newbyte[bmp.Height*bmpData.Stride];//将rgb数据拷贝到数组中去Marshal.Copy(bmpData.Scan0,byColorInfo,0,byColorInfo.Length);for(intx=0,xLen=bmp.Width;x<xLen;x++){for(inty=0,yLen=bmp.Height;y<yLen;y++){bytebyV=GetAvg(//自己写的一个计算平均值的方法byColorInfo[y*bmpData.Stride+x*3],//BbyColorInfo[y*bmpData.Stride+x*3+1],//GbyColorInfo[y*bmpData.Stride+x*3+2]);//RbyColorInfo[y*bmpData.Stride+x*3]=byColorInfo[y*bmpData.Stride+x*3+1]=byColorInfo[y*bmpData.Stride+x*3+2]=byV;}}Marshal.Copy(byColorInfo,0,bmpData.Scan0,byColorInfo.Length);bmp.UnlockBits(bmpData);//操作完拷贝回去解锁returnbmp;}

以前的一个黑白处理的代码写上了注释你自己参考吧
解决方案八:
Bitmapbmp=newBitmap(100,100);using(Graphicsg=Graphics.FromImage(bmp)){g.FillEllipse(Brushes.Red,newRectangle(0,0,80,80));g.FillRectangle(newSolidBrush(Color.FromArgb(128,Color.Green)),newRectangle(20,20,80,80));}e.Graphics.DrawImage(bmp,newPoint(10,10));//简单的ControlPaint.DrawImageDisabled(e.Graphics,bmp,120,10,Color.White);//用颜色矩阵System.Drawing.Imaging.ImageAttributesattr=newSystem.Drawing.Imaging.ImageAttributes();float[][]colorMatrixElements={newfloat[]{.33f,.33f,.33f,0,0},//r=(r+g+b)/3newfloat[]{.33f,.33f,.33f,0,0},//g=(r+g+b)/3newfloat[]{.33f,.33f,.33f,0,0},//b=(r+g+b)/3newfloat[]{0,0,0,1,0},//alphascalingfactorof1newfloat[]{0,0,0,0,1}};//System.Drawing.Imaging.ColorMatrixmatrix=newSystem.Drawing.Imaging.ColorMatrix(colorMatrixElements);attr.SetColorMatrix(matrix);e.Graphics.DrawImage(bmp,newRectangle(10,120,100,100),0,0,100,100,GraphicsUnit.Pixel,attr);

时间: 2024-08-18 10:56:46

C#图像处理 如何使用内存法将彩色图像转换为灰度图像并保存到picturebox中!!!的相关文章

如果将彩色图像和灰度图像一起放进 CNN 中去,会是什么结果?

  如果将彩色图像和灰度图像一起放进 CNN 中去,会是什么结果?   今天,坑爹的实验,我处理 SUN397 的时候,忘记去掉灰度图了,结果,利用微调后的 model 提取 feature,悲剧的发现,无论哪个图像,得到的 feature 都是一样的,卧槽,这不科学啊... 于是乎,就将其中的灰色图像扔掉后,继续微调,至今仍未 train 完毕,等吧,待会告诉你效果,不知道是不是这个原因导致的.   --------------------------- 上午出了结果:VGG-16 的训练精度

元素的内联事件处理函数的特殊作用域在各浏览器中存在差异_javascript技巧

标准参考 无. 问题描述 在一个元素的属性中绑定事件,实际上就创建了一个内联事件处理函数(如<h1 onclick="alert(this);"...>...</h1>),内联事件处理函数有其特殊的作用域链,并且各浏览器的实现细节也有差异. 造成的影响 如果在元素的内联事件处理函数中使用的变量或调用的方法不当,将导致脚本运行出错. 受影响的浏览器 所有浏览器 问题分析 1. 内联事件处理函数的作用域链 与其他函数不同,内联事件处理函数的作用域链从头部开始依次是:

如何将Excel 2013单元格内的时分秒转换为分钟形式

  解题思路 首先,hour函数提取出C2单元格的小时数8,在乘以60算出480分钟,其次,用480加上minute函数提取出C2单元格的分钟数15,结果为495,.最后495加上second函数提取出的C2单元格的秒数0,秒数0除以60(结果为0)转为分钟,最终的结果为495分钟. 案例教学 ①我们启动Excel2013,数据我已经准备好了,要将时分秒转为分钟格式,学过数学的人都知道,1小时等于60分钟,1分钟等于60秒,所以这里我们的公式可以这样写:=HOUR(C2)*60+MINUTE(C

图像处理------特殊灰度算法技巧

介绍几种特殊的灰度算法滤镜,将彩色图像转换为灰度图像.其中涉及到的有基于阈值的图 像二值化,弗洛伊德.斯坦德伯格抖动算法,基于阈值的部分灰度化   基础知识- 怎么把RGB转换为单色的[0 ~256]之间的灰度,最常用的转换公式如下: Gray = 0.299 * red + 0.587 * green + 0.114 * blue;   1.       基于像素平均值的图像阈值二值化算法: 处理流程: a.      首先将彩色图像转换为灰度图像 b.      计算灰度图像的算术平均值–

Win8.1轻松玩转内置的SkyDrive网盘功能

上个月,微软向全球发布了最新的Win8.1系统,同样对自带的多款的Modern应用也进行了功能更细和整合.其中一个就是SkyDrive应用,可以说,这个网盘已经与Win8.1系统高度整合在一起,无论是本地还是云端,都能操作. SkyDrive是微软帐户附带的免费云存储,容量从7G到25G不等,扩容需要点券或者付费.由于与Win8.1系统的整合,可以视为一个额外的硬盘驱动器,因此用户保存在网盘里的文件始终和用户的微软账户同步和绑定. 下面就介绍下SkyDrive网盘应用实际操作技巧: 实例一.使用

给PowerPoint2013演示文稿应用内置的Office主题样式

  幻灯片的母版和主题一样重要,而且Office2013中内置了很多主题样式,我们只需要在幻灯片中应用它们,就能改变PPT的整体风格,让你的PPT又提升一个档次! 详细步骤如下: 1.用PowerPoint2013打开一篇演示文稿,切换到"设计"选项卡,然后单击"主题"组中的"其他"按钮. 2.在弹出的窗格中有很多的Office主题,大家选择自己心仪的主题,单击即可. 3.返回演示文稿,大家就能看到自己的幻灯片应用了Office主题,效果如下.

Win8.1内置SkyDrive网盘使用攻略

  Skydrive,微软帐户附带的免费云存储,作为网盘,它与win8.1系统完美的结合,为win8.1系统带来了额外的硬盘空间,用户可以将网盘里的文件与系统帐户进行同步和绑定,是一个不错的功能.所以让我们来进一步了解一下它的使用攻略. 例一.使用SkyDrive应用将文件或者资料复制到SkyDrive网盘 1.进入"开始"屏幕,点击或单击SkyDrive,打开SkyDrive应用 2.点击文件夹,浏览到要将新文件上传的存放路径(例如"旅行计划"文件夹) 3.在空白

图像处理------ 二值膨胀及应用

基本原理: 膨胀是图像形态学的两个基本操作之一,另外一个是腐蚀操作.最典型的应用是在二值图像 中使用这两个基本操作,是很多识别技术中重要的中间处理步骤.在灰度图像中根据阈值同 样可以完成膨胀与腐蚀操作.对一幅二值图像f(x,y)完成膨胀操作,与对图像的卷积操作类 似,要有个操作数矩阵,最常见的为3X3的矩阵,与卷积操作不同的,是如果矩阵中的像素 点有任意一个点的值是前景色,则设置中心像素点为前景色,否则不变.   程序效果:(上为源图,下为膨胀以后效果) 程序原理: 首先把一幅彩色图像转换为灰度

图像处理------Canny边缘检测

一:历史 Canny边缘检测算法是1986年有John F. Canny开发出来一种基于图像梯度计算的边缘 检测算法,同时Canny本人对计算图像边缘提取学科的发展也是做出了很多的贡献.尽 管至今已经许多年过去,但是该算法仍然是图像边缘检测方法经典算法之一. 二:Canny边缘检测算法 经典的Canny边缘检测算法通常都是从高斯模糊开始,到基于双阈值实现边缘连接结束 .但是在实际工程应用中,考虑到输入图像都是彩色图像,最终边缘连接之后的图像要 二值化输出显示,所以完整的Canny边缘检测算法实现