Linux图片的灰度化,OpenCV实现图像的灰度处理,二值化,阀值选择

前几天接触了图像的处理,发现用OPencv处理确实比较方便,毕竟是很多东西都封装好的,但是要研究里面的东西,还是比较麻烦的,首先,你得知道图片处理的一些知识,比如腐蚀,膨胀,仿射,透射等,还有很多算法,傅里叶,积分,卷积,频谱,加权。反正我看了半天,是云里雾里的,所以就想先就笼统的过一遍,以后遇到了再具体分析,比较这方面的基础没那么扎实。先来记录下目前学习到的一些知识。

首先是图像的灰度处理:

CV_LOAD_IMAGE_GRAYSCALE,这是最简单之间的办法,在载入图像时直接处理

IplImage* Igray=cvLoadImage("test.jpg",CV_LOAD_IMAGE_GRAYSCALE);

得到的图像就是单通道的,也可以用这个函数:CVAPI(void)  cvCvtColor( const CvArr* src, CvArr* dst, int code );

code=CV_BGR2GRAY;

opencv还提供了很多方式,我这边就不一一举例了。

图像的二值化是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果。

灰度处理后就可以二值化了,这是方便图像处理的重要步骤,但貌似不适合对颜色有要求的图像处理,对轮廓有要求的比较有效。

函数是这个:CVAPI(double)  cvThreshold( const CvArr*  src, CvArr*  dst,

double  threshold, double  max_value,

int threshold_type );

threshold是阀值,max_value取值255最大值

threshold_type:就是显示的轮廓会有不同

/* Types of thresholding */

#define CV_THRESH_BINARY      0  /* value = value > threshold ? max_value : 0      */

#define CV_THRESH_BINARY_INV  1  /* value = value > threshold ? 0 : max_value      */

#define CV_THRESH_TRUNC      2  /* value = value > threshold ? threshold : value  */

#define CV_THRESH_TOZERO      3  /* value = value > threshold ? value : 0          */

#define CV_THRESH_TOZERO_INV  4  /* value = value > threshold ? 0 : value          */

#define CV_THRESH_MASK        7

#define CV_THRESH_OTSU        8  /* use Otsu algorithm to choose the optimal threshold value;

combine the flag with one of the above CV_THRESH_* values */

阀值选取:

一般来说会取100,127等固定值,这类取值比较随意,的到的图像也还可以,但是这边比较推荐的一个方式是自适应阀值:

IplImage* Igray=0,*It=0,*Iat;

int threshold_type = CV_THRESH_BINARY;

int adaptive_method = CV_ADAPTIVE_THRESH_GAUSSIAN_C;

int blocksize = 31;

double offset =15;

int threshold=100;

if(0==(Igray=cvLoadImage("test.jpg",CV_LOAD_IMAGE_GRAYSCALE))){

return -1;

}

It = cvCreateImage(cvSize(Igray->width,Igray->height),

IPL_DEPTH_8U,

1);

Iat = cvCreateImage(cvSize(Igray->width,Igray->height),

IPL_DEPTH_8U,

1);

//Threshold

cvThreshold(Igray,It,threshold,255,threshold_type);//阀值100

cvAdaptiveThreshold(Igray,Iat,255,adaptive_method,//自适应阀值,blocksize为奇数

threshold_type,blocksize,offset);

--------------------------------------分割线 --------------------------------------

--------------------------------------分割线 --------------------------------------

OpenCV的详细介绍:请点这里

OpenCV的下载地址:请点这里

0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值