前几天接触了图像的处理,发现用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实现图像的灰度处理,二值化,阀值选择的更多相关文章

  1. [iOS OpenCV的使用,灰度和二值化]

    看网上方法很多,但版本都不够新,我看了网上一些知识,总结了下,来个最新版Xcode6.1的. 最近主要想做iOS端的车牌识别,所以开始了解OpenCV.有兴趣的可以跟我交流下哈. 一.Opencv的使 ...

  2. OpenCV图像的全局阈值二值化函数(OTSU)

    cv::threshold(GrayImg, Bw, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);//灰度图像二值化 CV_THRESH_OTSU是提取图像最 ...

  3. VB6之图像灰度与二值化

    老代码备忘,我对图像处理不是太懂. 注:部分代码引援自网上,话说我到底自己写过什么代码... Private Declare Function GetBitmapBits Lib "gdi3 ...

  4. opencv-python图像二值化函数cv2.threshold函数详解及参数cv2.THRESH_OTSU使用

    cv2.threshold()函数的作用是将一幅灰度图二值化,基本用法如下: #ret:暂时就认为是设定的thresh阈值,mask:二值化的图像 ret,mask = cv2.threshold(i ...

  5. [转载+原创]Emgu CV on C# (四) —— Emgu CV on 全局固定阈值二值化

    重点介绍了全局二值化原理及数学实现,并利用emgucv方法编程实现. 一.理论概述(转载,如果懂图像处理,可以略过,仅用作科普,或者写文章凑字数)  1.概述 图像二值化是图像处理中的一项基本技术,也 ...

  6. 二值化函数cvThreshold()参数CV_THRESH_OTSU的疑惑【转】

    查看OpenCV文档cvThreshold(),在二值化函数cvThreshold(const CvArr* src, CvArr* dst, double threshold, double max ...

  7. Java基于opencv实现图像数字识别(三)—灰度化和二值化

    Java基于opencv实现图像数字识别(三)-灰度化和二值化 一.灰度化 灰度化:在RGB模型中,如果R=G=B时,则彩色表示灰度颜色,其中R=G=B的值叫灰度值:因此,灰度图像每个像素点只需一个字 ...

  8. OpenCV图像的二值化

    图像的二值化: 与边缘检测相比,轮廓检测有时能更好的反映图像的内容.而要对图像进行轮廓检测,则必须要先对图像进行二值化,图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出 ...

  9. OpenCV中对图像进行二值化的关键函数——cvThreshold()。

    函数功能:采用Canny方法对图像进行边缘检测 函数原型: void cvThreshold( const CvArr* src, CvArr* dst, double threshold, doub ...

随机推荐

  1. java的new BufferedReader(new InputStreamReader(System.in))

    流 JAVA /IO 基本小结 通过一行常见的代码讨论:new BufferedReader(new InputStreamReader(System.in)) /*** *** 看到这篇文章挺好的, ...

  2. iOS WebCore的WebEvent和EventHandler

    WebEvent是iOS专有的类,负责封装和携带从UIKit得到的系统事件信息,并由WebKit层的WAKResponder子类传递到WebCore的EventHandler. UIKit层的逻辑可参 ...

  3. Qt实现QQ好友下拉列表(用QListView实现,所以还得定义它的Model)

    偶然发现Qt有个控件可以实现下拉列表,所以就试着实现一下类似QQ面板的下拉列表,这里主要实现几个功能: 1.可以删除列表中图标 2.可以像qq一样的,把某个分组下的图标转移到另外的分组 3.添加分组 ...

  4. 浅谈MySql的存储引擎(表类型) (转)

    什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合. 我们通常说的MySql数据库,sql server数据库等等其实是 ...

  5. 基于visual Studio2013解决算法导论之006最大堆排序

     题目 最大堆排序 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <malloc.h> #i ...

  6. css sprites 图片精灵自动生成 插件

    grunt-spritesmith https://www.npmjs.com/package/grunt-spritesmith

  7. eclipse的SVN插件的配置

    http://www.cnblogs.com/kekec/archive/2010/08/09/1795581.html

  8. NodeJs 实时压缩 项目js文件

    + 1. 下载nodejs : "http://nodejs.org/". + 2. 以administrator权限打开cmd.+ 3. cmd路径定位到要压缩的目录: &quo ...

  9. package、import、java及javac的相关介绍(转)

    Package: package中所存放的文件 所有文件,不过一般分一下就分这三种 1.java程序源文件,扩展名为.java: 2.编译好的java类文件,扩展名为.class: 3.其他文件,也称 ...

  10. 【iOS】网页中调用JS与JS注入

    非常多应用为了节约成本,做出同一时候在Android与iOS上都能使用的界面,这时就要使用WebView来做.Android和IOS上都有WebView,做起来非常省事.当然这时就要考虑怎样在Andr ...