图片二值化 opencv实现 代码及分析
2012-09-25 17:04
429 查看
1.图片二值化概念
就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果。将256个亮度等级的灰度图像通过适当的阈值选取而获得仍然可以反映图像整体和局部特征的二值化图像。
在数字图像处理中,二值图像占有非常重要的地位,首先,图像的二值化有利于图像的进一步处理,使图像变得简单,而且数据量减小,能突显出感兴趣的目标的轮廓。其次,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像。
2.实现代码分析
基本思想:将RGB彩色图片对应到灰度图像上,但是最后通过一个阀值,将灰度值极端地设为255和0.
具体实现:R,G,B三色值相加/3,若值大于128,则将该点的灰度值设为255;若小于128,则设为0.
实际代码:(运行环境:Win7 64位 / opencv2.3 / VS2010)
3.运行结果:
4.核心分析
CvScalar 定义可存放1—4个数值的数值,其结构如下。
typedef struct CvScalar
{
double val[4];
}
CvScalar;
------------------------------------------------
CvScalar pt;
如果使用的图像是1通道的,则pt.val[0]中存储数据
如果使用的图像是3通道的,则pt.val[0],pt.val[1],pt.val[2]中存储数据
==============================
cvGet2D 获得某个点的值, idx0=hight 行值, idx1=width 列值。
CVAPI(CvScalar) cvGet2D( const CvArr* arr, int idx0, int idx1 );
-----------------------------------------------
cvSet2D 给某个点赋值。
CVAPI(void) cvSet2D( CvArr* arr, int idx0, int idx1, CvScalar value );
-----------------------------------------------
由上可见,cvGet2D的返回类型和cvSet2D中value的类型都是CvScalar,这样定义一个CvScalar变量再调用函数就OK了。
CvScalar s = cvSum(arr);
s.val[0]:数组arr中的B通道值的和,double类型
s.val[1]:数组arr中的G通道值的和,double类型
s.val[2]:数组arr中的R通道值的和,double类型
s.val[3]:数组arr中的alphe通道值的和,double类型
5.参考链接:
[1]http://baike.baidu.com/view/1532602.htm
[2]http://blog.sina.com.cn/s/blog_5f2c831b0100pzuu.html
[3]http://blog.sina.com.cn/s/blog_4ffc4c3001010hyb.html
*********** 转载请注明出处 ***********
就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果。将256个亮度等级的灰度图像通过适当的阈值选取而获得仍然可以反映图像整体和局部特征的二值化图像。
在数字图像处理中,二值图像占有非常重要的地位,首先,图像的二值化有利于图像的进一步处理,使图像变得简单,而且数据量减小,能突显出感兴趣的目标的轮廓。其次,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像。
2.实现代码分析
基本思想:将RGB彩色图片对应到灰度图像上,但是最后通过一个阀值,将灰度值极端地设为255和0.
具体实现:R,G,B三色值相加/3,若值大于128,则将该点的灰度值设为255;若小于128,则设为0.
实际代码:(运行环境:Win7 64位 / opencv2.3 / VS2010)
#include <iostream> #include <string> #include <opencv/cv.h> #include <opencv/highgui.h> #include <opencv/cxcore.h> #include <iostream> using namespace std; int main () { IplImage* img = cvLoadImage("lena.jpg",-1); IplImage* biimg = cvCreateImage(cvGetSize(img),img->depth,img->nChannels); CvScalar s; int sum=0; for (int i=0;i<img->height;i++) { for (int j=0;j<img->width;j++) { s = cvGet2D(img,i,j); //cout<<s.val[0]<<" "<<s.val[1]<<" "<<s.val[2]<<endl; 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(biimg,i,j,s); } else { s.val[0]=s.val[1]=s.val[2]=0; cvSet2D(biimg,i,j,s); } } } cvSaveImage("new.jpg",biimg); cvNamedWindow("SourceImage"); cvShowImage("SourceImage",img); cvNamedWindow("imagebinary"); cvShowImage("imagebinary",biimg); cvWaitKey(0); cvDestroyWindow("SourceImage"); cvDestroyWindow("imagebinary"); cvReleaseImage(&img); cvReleaseImage(&biimg); }
3.运行结果:
4.核心分析
CvScalar 定义可存放1—4个数值的数值,其结构如下。
typedef struct CvScalar
{
double val[4];
}
CvScalar;
------------------------------------------------
CvScalar pt;
如果使用的图像是1通道的,则pt.val[0]中存储数据
如果使用的图像是3通道的,则pt.val[0],pt.val[1],pt.val[2]中存储数据
==============================
cvGet2D 获得某个点的值, idx0=hight 行值, idx1=width 列值。
CVAPI(CvScalar) cvGet2D( const CvArr* arr, int idx0, int idx1 );
-----------------------------------------------
cvSet2D 给某个点赋值。
CVAPI(void) cvSet2D( CvArr* arr, int idx0, int idx1, CvScalar value );
-----------------------------------------------
由上可见,cvGet2D的返回类型和cvSet2D中value的类型都是CvScalar,这样定义一个CvScalar变量再调用函数就OK了。
CvScalar s = cvSum(arr);
s.val[0]:数组arr中的B通道值的和,double类型
s.val[1]:数组arr中的G通道值的和,double类型
s.val[2]:数组arr中的R通道值的和,double类型
s.val[3]:数组arr中的alphe通道值的和,double类型
5.参考链接:
[1]http://baike.baidu.com/view/1532602.htm
[2]http://blog.sina.com.cn/s/blog_5f2c831b0100pzuu.html
[3]http://blog.sina.com.cn/s/blog_4ffc4c3001010hyb.html
*********** 转载请注明出处 ***********
相关文章推荐
- opencv实现对图片的二值化
- RGB彩色图像与灰度图像转换 opencv实现 代码及分析
- OpenCv实现卷积神经网络实例:tiny_cnn代码详解(6)——average_pooling_layer层结构类分析
- Lucas-Kanade算法原理介绍及OpenCV代码实现分析
- OpenCV机器学习(1):贝叶斯分类器实现代码分析
- 利用最大熵进行阈值分割从而实现灰度图像的二值化的原理概要及OpenCV代码
- Android BitmapShader 实战 实现圆形、圆角图片——代码分析
- 互联网的一些常用实现原理分析及代码实现(一):图片放大镜效果
- 触摸屏代码分析——实现ADC转换完成中断
- Java NIO原理图文分析及代码实现
- Java代码实现图片水印效果
- jQuery 实现图片动画代码
- ASP.NET 图片加水印防盗链实现代码
- Objective-C block实现代码分析
- 分析并输出Python代码依赖的库的实现代码
- Tga图片格式分析以及程序实现
- PHP判断远程图片或文件是否存在的实现代码
- 基于python、dlib和opencv的200行代码实现的换脸
- PHP 实现等比压缩图片尺寸和大小实例代码
- .net c# gif动画如何添加图片水印实现思路及代码学习