OpenCV图像的二值化
图像的二值化:
与边缘检测相比,轮廓检测有时能更好的反映图像的内容。而要对图像进行轮廓检测,则必须要先对图像进行二值化,图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果。在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓。
下面就介绍OpenCV中对图像进行二值化的关键函数——cvThreshold()。
函数功能:采用Canny方法对图像进行边缘检测
函数原型:
void cvThreshold(
const CvArr* src, 第一个参数表示输入图像,必须为单通道灰度图。
CvArr* dst, 第二个参数表示输出的边缘图像,为单通道黑白图。
double threshold, 第三个参数表示阈值
double max_value, 第四个参数表示最大值
int threshold_type 第五个参数表示运算方法。
);
在OpenCV的imgproc\types_c.h中可以找到运算方法的定义。
enum
{
CV_THRESH_BINARY =0, value = value > threshold ? max_value : 0
CV_THRESH_BINARY_INV =1, value = value > threshold ? 0 : max_value
CV_THRESH_TRUNC =2, value = value > threshold ? threshold : value
CV_THRESH_TOZERO =3, value = value > threshold ? value : 0
CV_THRESH_TOZERO_INV =4, value = value > threshold ? 0 : value
CV_THRESH_MASK =7,
CV_THRESH_OTSU =8 use Otsu algorithm to choose the optimal threshold value;
combine the flag with one of the above CV_THRESH_* values
};
#include "stdafx.h"
#include "iostream"
using namespace std;
#include "opencv2/opencv.hpp" IplImage *pGrayImage = NULL;
IplImage *pBinaryImage = NULL; const char *pImagePath = "E:/C_VC_code/Text_Photo/girl001.jpg";
const char *pGrayWindowsTitle = "原图";
const char *pBinaryWindowsTitle = "二值图";
const char *pWindowsToolBarTitle = "阀值";
void onCallBack(int pos)
{
//change into binary image
cvThreshold(pGrayImage, pBinaryImage, pos, 255, CV_THRESH_BINARY);
cvShowImage(pBinaryWindowsTitle,pBinaryImage);
}
int main()
{
//load srcouse image from file
//IplImage *pImage = cvLoadImage(pImagePath, CV_LOAD_IMAGE_UNCHANGED); //load gray image from srcouce file image
//pGrayImage = cvLoadImage(pImagePath, CV_LOAD_IMAGE_GRAYSCALE);//直接从原图获取灰度图
//cvCvtColor(pImage,pGrayImage,CV_BGR2GRAY); //间接转化为灰度图
IplImage *pImage = cvLoadImage(pImagePath, CV_LOAD_IMAGE_UNCHANGED);
pGrayImage = cvCreateImage(cvGetSize(pImage), IPL_DEPTH_8U,1);
cvCvtColor(pImage, pGrayImage, CV_BGR2GRAY); pBinaryImage = cvCreateImage(cvGetSize(pGrayImage), IPL_DEPTH_8U,1); //create window and show orial image
cvNamedWindow(pGrayWindowsTitle,CV_WINDOW_AUTOSIZE);
cvNamedWindow(pBinaryWindowsTitle,CV_WINDOW_AUTOSIZE); //creat slide bar
int pos = 1;
cvCreateTrackbar(pWindowsToolBarTitle, pBinaryWindowsTitle, &pos, 100,onCallBack);
onCallBack(0); cvShowImage(pGrayWindowsTitle,pGrayImage);
cvShowImage(pBinaryWindowsTitle,pBinaryImage); cvWaitKey(0);
cvDestroyWindow(pBinaryWindowsTitle);
cvDestroyWindow(pGrayWindowsTitle);
cvReleaseImage(&pGrayImage);
cvReleaseImage(&pBinaryImage);
return 0;
}

OpenCV图像的二值化的更多相关文章
- OpenCV中对图像进行二值化的关键函数——cvThreshold()。
函数功能:采用Canny方法对图像进行边缘检测 函数原型: void cvThreshold( const CvArr* src, CvArr* dst, double threshold, doub ...
- 实现图像的二值化(java+opencv)
书里的解释: 其他的没找到什么资料,直接参考百度百科 https://baike.baidu.com/item/%E5%9B%BE%E5%83%8F%E4%BA%8C%E5%80%BC%E5%8C%9 ...
- python实现超大图像的二值化方法
一,分块处理超大图像的二值化问题 (1) 全局阈值处理 (2) 局部阈值 二,空白区域过滤 三,先缩放进行二值化,然后还原大小 np.mean() 返回数组元素的平均值 np.std() 返回数 ...
- Mac中opencv批量对图片进行二值化
对灰度图像进行二值化,传入的图片是手写汉字的截图,通过二值化把字的部分提出来.用ostu进行二值化 #include <stdio.h> #include <iostream> ...
- opencv 对RGB图像直接二值化
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...
- Opencv实现图像的灰度处理,二值化,阀值选择
前几天接触了图像的处理,发现用OPencv处理确实比較方便.毕竟是非常多东西都封装好的.可是要研究里面的东西,还是比較麻烦的,首先,你得知道图片处理的一些知识,比方腐蚀,膨胀,仿射,透射等,还有非常多 ...
- Java基于opencv实现图像数字识别(三)—灰度化和二值化
Java基于opencv实现图像数字识别(三)-灰度化和二值化 一.灰度化 灰度化:在RGB模型中,如果R=G=B时,则彩色表示灰度颜色,其中R=G=B的值叫灰度值:因此,灰度图像每个像素点只需一个字 ...
- opencv图像二值化的函数cvThreshold()。 cvAdaptiveThreshol
OpenCV中对图像进行二值化的关键函数——cvThreshold(). 函数功能:采用Canny方法对图像进行边缘检测 函数原型: void cvThreshold( const CvArr* sr ...
- opencv python 图像二值化/简单阈值化/大津阈值法
pip install matplotlib 1简单的阈值化 cv2.threshold第一个参数是源图像,它应该是灰度图像. 第二个参数是用于对像素值进行分类的阈值, 第三个参数是maxVal,它表 ...
随机推荐
- IBatis插入类的实例
<insert id="insOrderDetail" parameterClass="OrderDetail"> INSERT INTO Orde ...
- Axure7.0汉化方法
下载汉化包 AxureRP7CN_汉化包.rar 首先退出正在运行中的 Axure (如果您正在使用). 将 汉化包.rar 文件解压, 得到 lang 文件夹, 然后将其复制到 Axure 安装目 ...
- jquery条件选择多个元素(与、或者)
或者:选择器用逗号分隔,这也对应了jquery对象转dom为$(obj)[0]的写法 如:$('div[name="a"],div[name="b"]') :h ...
- Java——jar命令
把*.class压缩成一个文件,这样的文件就称为jar文件. 如果想要生成jar文件,直接使用JDK中bin目录里的jar.exe就可以将所有的类文件进行压缩. 当用户得到一个jar文件后,即可通过设 ...
- Vim编辑器
vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的.下面的文章翻译自<Learn Vim Progress ...
- phpstorm webstorm安装主题 sublime样 还有都可以用的注册码
注册码 webstorm phpstorm 基本所有版本通吃 webstrom9.0.3 通过 phpstorm 8.0.1 User Name: EMBRACE License Key: ==== ...
- [Bug]IIs Cannot read configuration file due to insufficient permissions
摘要 在部署站点的时候,遇到这样的问题Cannot read configuration file due to insufficient permissions 解决办法 在服务器上部署站点,浏览的 ...
- 关于标准C语言的预定义宏【转】
标准C语言预处理要求定义某些对象宏,每个预定义宏的名称一两个下划线字符开头和结尾,这些预定义宏不能被取消定义(#undef)或由编程人员重新定义.下面预定义宏表,被我抄了下来. __LINE__ 当 ...
- 思维导图-javascript(转)
学习的道路就是要不断的总结归纳,好记性不如烂笔头,so,下面将po出8张javascript相关的思维导图. 思维导图小tips:思维导图又叫心智图,是表达发射性思维的有效的图形思维工具 ,它简单却又 ...
- [原]发布一个jQuery提示框插件,Github开源附主站,jquery.tooltips.js
一个简单精致的jQuery带箭头提示框插件 插件写好快一年了,和一个 弹出框插件(点击查看) 一起写的,一直没有整理出来,昨天得功夫整理并放到了github上,源码和网站均可在线看或下载. CSS中的 ...