vb.net 控制台输出怎么使图像灰度化再输出

2013年12月 VB大版内专家分月排行榜第二2013年3月 VB大版内专家分月排行榜第二2013年1月 VB大版内专家分月排行榜第二2012年9月 VB大版内专家分月排行榜第二2012年8月 VB大版内专家分月排行榜第二2012年7月 VB大版内专家分月排行榜第二2006年7月 VB大版内专家分月排行榜第二2006年5月 VB大版内专家分月排行榜第二
2014年9月 VB大版内专家分月排行榜第三2013年7月 VB大版内专家分月排行榜第三2013年6月 VB大版内专家分月排行榜第三2013年4月 VB大版内专家分月排行榜第三2012年11月 VB大版内专家分月排行榜第三2006年6月 VB大版内专家分月排行榜第三2006年4月 VB大版内专家分月排行榜第三2002年12月 VB大版内专家分月排行榜第三2002年11月 VB大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。本帖子已过去太久远了,不再提供回复功能。7192人阅读
多媒体--图像处理理论(11)
&& 在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫灰度值,因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255。一般有以下四种方法对彩色图像进行灰度化:   
1.分量法   
将彩色图像中的三分量的亮度作为三个灰度图像的灰度值,可根据应用需要选取一种灰度图像。f1(i,j)=R(i,j) f2(i,j)=G(i,j) f3(i,j)=B(i,j) 其中fk(i,j)(k=1,2,3)为转换后的灰度图像在(i,j)处的灰度值。
如图4-1的彩色图像转为4-2三种灰度图。
 图4-1 彩色图像   (a)R分量灰度图 (b)G分量灰度图 (c)B分量灰度图   
图4-2 彩色图的三分量灰度图   
2.最大值法   
将彩色图像中的三分量亮度的最大值作为灰度图的灰度值。   f(i,j)=max(R(i,j),G(i,j),B(i,j))   
3.平均值法   
将彩色图像中的三分量亮度求平均得到一个灰度图。   f(i,j)=(R(i,j)+G(i,j)+B(i,j)) /3   
4.加权平均法   
根据重要性及其它指标,将三个分量以不同的权值进行加权平均。由于人眼对绿色的敏感最高,对蓝色敏感最低,因此,按下式对RGB三分量进行加权平均能得到较合理的灰度图像。   f(i,j)=0.30R(i,j)+0.59G(i,j)+0.11B(i,j))
二值化
全局二值化
  一幅图像包括目标物体、背景还有噪声,要想从多值的数字图像中直接提取出目标物体,最常用的方法就是设定一个全局的阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群。将大于T的像素群的像素值设定为白色(或者黑色),小于T的像素群的像素值设定为黑色(或者白色)。
  全局二值化,在表现图像细节方面存在很大缺陷。为了弥补这个缺陷,出现了局部二值化方法。
  局部二值化的方法就是按照一定的规则将整幅图像划分为N个窗口,对这N个窗口中的每一个窗口再按照一个统一的阈值T将该窗口内的像素划分为两部分,进行二值化处理。
局部自适应二值化
  局部二值化也有一个缺陷。这个缺陷存在于那个统一阈值的选定。这个阈值是没有经过合理的运算得来,一般是取该窗口的平局值。这就导致在每一个窗口内仍然出现的是全局二值化的缺陷。为了解决这个问题,就出现了局部自适应二值化方法。
  局部自适应二值化,该方法就是在局部二值化的基础之上,将阈值的设定更加合理化。该方法的阈值是通过对该窗口像素的平均值E,像素之间的差平方P,像素之间的均方根值Q等各种局部特征,设定一个参数方程进行阈值的计算,例如:T=a*E+b*P+c*Q,其中a,b,c是自由参数。这样得出来的二值化图像就更能表现出二值化图像中的细节。
&&& 反色的实际含义是将R、G、B值反转。若颜色的量化级别是256,则新图的R、G、B值为255减去原图的R、G、B值。这里针对的是所有图,包括真彩图、带调色板的彩色图(又称为伪彩色图)、和灰度图。针对不同种类有不同的处理。先看看真彩图。我们知道真彩图不带调色板,每个象素用3个字节,表示R、G、B三个分量。所以处理很简单,把反转后的R、G、B值写入新图即可,比如一个点的颜色为(0,0,0),反色后为(255,255,255)。再来看看带调色板的彩色图,我们知道位图中的数据只是对应调色板中的一个索引值,我们只需要将调色板中的颜色反转,形成新调色板,而位图数据不用动,就能够实现反转。
灰度图是一种特殊的伪彩色图,只不过调色板中的R、G、B值都是一样的而已。所以反转的处理和上面讲的一样。
求区域内R,G,B的各自平均值
求R,G,B的平均值在图像处理上有很大的意义,代码如下:
void GetRGBInfo(CPoint point,CPoint pStart ,int& nBData,int& nGData ,int & nRData)
int nLeft,nRight,nUp,nB
nLeft = point.x&pStart.x?point.x:pStart.x;
nRight = point.x&pStart.x?point.x:pStart.x;
nBottom = point.y&pStart.y?point.y:pStart.y;
nUp = point.y&pStart.y?point.y:pStart.y;
int nNum = 0;
long nValueR=0;
long nValueG=0;
long nValueB=0;
for (int i=nBi&nUp;i++)
for (int j=nLj&nRj++)
nValueR+= g_pImageSrc[i*m_nPicWidth*3+j*3];
nValueG+= g_pImageSrc[i*m_nPicWidth*3+j*3+1];
nValueB+= g_pImageSrc[i*m_nPicWidth*3+j*3+2];
if (nNum!=0)
nBData = nValueR/nN
nGData = nValueG/nN
nRData = nValueB/nN
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:421246次
积分:6536
积分:6536
排名:第2825名
原创:191篇
转载:315篇
评论:33条
(1)(8)(12)(9)(12)(5)(6)(9)(13)(2)(6)(2)(2)(1)(3)(3)(3)(5)(7)(8)(5)(5)(3)(6)(6)(3)(2)(19)(4)(17)(11)(2)(9)(13)(13)(10)(13)(11)(15)(17)(18)(13)(5)(11)(11)(20)(30)(36)(35)(9)(3)(2)(8)(3)转-OpenCV—RGB图像灰度化,并提取轮廓
OpenCV—RGB图像灰度化,并提取轮廓
主要功能:加载一个RGB彩色图像,将其转化成灰度图,并采用Canny算法提取灰度图的边缘
主要函数说明:
&1& cvCvtColor(
const CvArr* src, CvArr* dst, int code )
表示将图像src的颜色空间转换后保存到图像dst中,其中code表示颜色空间转化形式,主要有CV_BGR2BGRA、CV_BGRA2BGR、CV_BGR2RGBA、CV_RGBA2BGR、CV_BGR2RGB等60种颜色空间转换形式,本程序中code为:CV_RGB2GRAY。
&2& cvCanny( const
CvArr* image, CvArr* edges, double threshold1,
double threshold2, int aperture_size CV_DEFAULT(3)
表示将图像image中阈值为thresh1至thresh2间的轮廓提取出来,并将轮廓图像保存到edges中。
&3&另外在轮廓图像中添加了一个滑动条以控制阈值范围,查看不同阈值范围内的轮廓图像。
***********************
代码如下:
// RGB_Gray_Canny.cpp :
Defines the entry point for the console application.
"stdafx.h"
&cxcore.h&
&highgui.h&
&iostream&
using namespace
//声明图像IplImage指针
pSrcImg=NULL;
IplImage* pGrayImg =
IplImage* pCannyImg =
int Thresh=50;
//滑动条响应函数
void onTrackerSlid(int
&& cvCanny(pGrayImg,
pCannyImg,(float)thresh,(float)thresh*3, 3);
&& cvShowImage( "Canny
Image", pCannyImg );
int main( int argc, char**
if(argc!=2)
argv[1]="lena.jpg";
//载入图像,强制转化为Gray
if((pSrcImg = cvLoadImage( argv[1],1)) != 0 )
cout&&"Press ESC to
//将颜色空间由RGB转化为Gray
pGrayImg=cvCreateImage(cvGetSize(pSrcImg),8,1);
cvCvtColor(pSrcImg,pGrayImg,CV_RGB2GRAY);
//canny边缘检测
pCannyImg =
cvCreateImage(cvGetSize(pGrayImg),IPL_DEPTH_8U,1);
//cvCanny(pGrayImg, pCannyImg, 150,50, 3);
//创建窗口
cvNamedWindow( "Source Image",
CV_WINDOW_AUTOSIZE);
cvNamedWindow( "Gray Image",CV_WINDOW_AUTOSIZE);
cvNamedWindow( "Canny Image",CV_WINDOW_AUTOSIZE);
//添加滑动条来调节边缘检测的阈值
cvShowImage( "Gray Image", pCannyImg);
cvCreateTrackbar("Threshold", "Canny Image",
&Thresh, 100, onTrackerSlid);
onTrackerSlid(Thresh);&&&&&
//显示图像
cvShowImage( "Source Image", pSrcImg );
cvShowImage( "Gray Image",pGrayImg);
//保存图像
cvSaveImage( "Gray_Image.jpg",pGrayImg);
cvSaveImage( "Canny_Image.jpg",pCannyImg);
//等待按"ESC"键退出
&&&if(cvWaitKey(100)==27)
&&&&&&&&&&&&&&
//销毁窗口
//cvWaitKey(0);
cvDestroyWindow( "Source Image" );
cvDestroyWindow( "Canny Image" );
cvDestroyWindow( "Gray Image");
//释放图像
cvReleaseImage( &pGrayImg );
cvReleaseImage( &pCannyImg );
cvReleaseImage( &pSrcImg);
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。图像灰度化的方法及编程实现_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
图像灰度化的方法及编程实现
上传于||文档简介
&&图​像​灰​度​化
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩1页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢}

我要回帖

更多关于 vb.net 图像处理 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信