图像灰度化、二值化理解
1个回答
展开全部
图像的二值化是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果。
将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,首先,图像的二值化有利于图像的进一步处理,使图像变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓。其次,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像。
所有灰度大于或等于阀值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域
一下程序可以实现图像的二值化:
/**************************************
*
* 函数名:
* cvBinaryEx
* 参 数:
* imgSrc - 进行锐化的图像
* 返回值:
* 成功锐化返回TRUE,否则返回false;
* 说 明:
*
* 对图进行二值化
*
************************************/
bool cvBinaryEx(IplImage *imgSrc)
{
IplImage* img = cvCreateImage(cvGetSize(imgSrc),imgSrc->depth,imgSrc->nChannels);
CvScalar s;
int sum=0;
for (int i=0; i < imgSrc->height; i++)
{
for (int j=0; j < imgSrc->width; j++)
{
s = cvGet2D(imgSrc,i,j);
sum = (s.val[0]+s.val[1]+s.val[2])/3;
if (sum > 128)
{
s.val[0]=s.val[1]=s.val[2]=255;
cvSet2D(imgSrc,i,j,s);
}
else
{
s.val[0]=s.val[1]=s.val[2]=0;
cvSet2D(imgSrc,i,j,s);
}
}
}
return true;
}
灰度图grayscale
灰度是指只含亮度信息,不含色彩信息的图像。黑白照片就是灰度图,特点是亮度由暗到明,变化是连续的。要表示灰度图,就需要把亮度值进行量化
使用灰度图的好处:
① RGB的值都一样。
② 图像数据即调色板索引值,就是实际的RGB值,也就是亮度值。
③ 因为是256色调色板,所以图像数据中一个字节代表一个像素,很整齐。
所以,做图像处理时都采用灰度图。
将一幅RGB格式的图像转化为灰度图:
IplImage *src= cvLoadImage("C:\\home.bmp", -1);
IplImage *dest ;
cvCvtColor(Src, dest, CV_RGB2GRAY);
然后将灰度图dest转化为二值化图像(保存在src中),可以直接使用cvThreshold函数:
cvThreshold(dest, src, 1, 255, CV_THRESH_BINARY);
一般先将图像灰度化,然后再二值化,然后在进行边缘处理等操作。。。
灰度化-->二值化--->边缘提取>>>
https://blog.csdn.net/fu6543210/article/details/79926873
将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,首先,图像的二值化有利于图像的进一步处理,使图像变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓。其次,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像。
所有灰度大于或等于阀值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域
一下程序可以实现图像的二值化:
/**************************************
*
* 函数名:
* cvBinaryEx
* 参 数:
* imgSrc - 进行锐化的图像
* 返回值:
* 成功锐化返回TRUE,否则返回false;
* 说 明:
*
* 对图进行二值化
*
************************************/
bool cvBinaryEx(IplImage *imgSrc)
{
IplImage* img = cvCreateImage(cvGetSize(imgSrc),imgSrc->depth,imgSrc->nChannels);
CvScalar s;
int sum=0;
for (int i=0; i < imgSrc->height; i++)
{
for (int j=0; j < imgSrc->width; j++)
{
s = cvGet2D(imgSrc,i,j);
sum = (s.val[0]+s.val[1]+s.val[2])/3;
if (sum > 128)
{
s.val[0]=s.val[1]=s.val[2]=255;
cvSet2D(imgSrc,i,j,s);
}
else
{
s.val[0]=s.val[1]=s.val[2]=0;
cvSet2D(imgSrc,i,j,s);
}
}
}
return true;
}
灰度图grayscale
灰度是指只含亮度信息,不含色彩信息的图像。黑白照片就是灰度图,特点是亮度由暗到明,变化是连续的。要表示灰度图,就需要把亮度值进行量化
使用灰度图的好处:
① RGB的值都一样。
② 图像数据即调色板索引值,就是实际的RGB值,也就是亮度值。
③ 因为是256色调色板,所以图像数据中一个字节代表一个像素,很整齐。
所以,做图像处理时都采用灰度图。
将一幅RGB格式的图像转化为灰度图:
IplImage *src= cvLoadImage("C:\\home.bmp", -1);
IplImage *dest ;
cvCvtColor(Src, dest, CV_RGB2GRAY);
然后将灰度图dest转化为二值化图像(保存在src中),可以直接使用cvThreshold函数:
cvThreshold(dest, src, 1, 255, CV_THRESH_BINARY);
一般先将图像灰度化,然后再二值化,然后在进行边缘处理等操作。。。
灰度化-->二值化--->边缘提取>>>
https://blog.csdn.net/fu6543210/article/details/79926873
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询