OpenCV仪表数据识别(二):数字区域自动定位
2016-07-17 12:34
507 查看
下载和配置Opencv在网上和书上有很多的讲解,这里不再赘述。
此处附上Opencv的下载链接。
想要对图片中的数字信息进行识别首先要对图片进行预处理,排除干扰的因素,只留下有价值的信息。
这里需要两张图,一张为有数据的图片,一张为仪表关闭时没有数据的图片。
功能:求两个图片(两帧)的差值
参数1:源图片1,单通道灰度图
参数2:源图片2,单通道灰度图
参数3:目标图像,得到的差值图存在*dst中
2.
功能:加载图片
参数1:源图片地址
参数2:加载图片的属性
常用:
CV_LOAD_IMAGE_UNCHANGED 图像保持原有属性
CV_LOAD_IMAGE_COLOR 载入图像为三通道
3.
功能:创建图片
参数1:图片宽、高
参数2:图片深度
IPL_DEPTH_8U - 无符号8位整型
IPL_DEPTH_8S - 有符号8位整型
IPL_DEPTH_16U - 无符号16位整型
IPL_DEPTH_16S - 有符号16位整型
IPL_DEPTH_32S - 有符号32位整型
IPL_DEPTH_32F - 单精度浮点数
IPL_DEPTH_64F - 双精度浮点数
参数3:一个元素的通道数(1、2、3)
4.
功能:颜色转换
参数1:源图片
参数2:目标图片
参数3:转换模式
CV_BGR2GRAY 转换为灰度图 (des是单通道图片)
5.
功能:图片二值化(只有黑色和白色)
参数1:src 源图片,单通道灰度图
参数2:dst 目标图片,单通道灰度图
参数3:threshold 阈值
参数4:max_value 使用 CV_THRESH_BINARY 和 CV_THRESH_BINARY_INV 的最大值。
参数5:threshold_type 阈值类型
CV_THRESH_BINARY =0 大于阈值的像素设为最大值,小于阈值的设为最小值
CV_THRESH_BINARY_INV =1 大于阈值的像素设为最小值,小于阈值的像素设为最大值
CV_THRESH_TRUNC =2 大于阈值的像素设为阈值,小于阈值的像素保持原色
CV_THRESH_TOZERO =3 大于阈值的像素保持原值,小于阈值的像素设为0
CV_THRESH_TOZERO_INV=4 大于阈值的像素设为0,小于阈值的像素保持原值
此处附上Opencv的下载链接。
想要对图片中的数字信息进行识别首先要对图片进行预处理,排除干扰的因素,只留下有价值的信息。
这里需要两张图,一张为有数据的图片,一张为仪表关闭时没有数据的图片。
1.原理
仪表数字和背景的区别就是数据会在短时间内会发生变化,这样在差分二值图中未变化的背景区域就会被滤除。2.函数说明
1.cvAbsDiff(const CvArr* scr1, const CvArr* scr2, CvArr *dst)
功能:求两个图片(两帧)的差值
参数1:源图片1,单通道灰度图
参数2:源图片2,单通道灰度图
参数3:目标图像,得到的差值图存在*dst中
2.
cvLoadImage( const char* filename, int flags=CV_LOAD_IMAGE_COLOR )
功能:加载图片
参数1:源图片地址
参数2:加载图片的属性
常用:
CV_LOAD_IMAGE_UNCHANGED 图像保持原有属性
CV_LOAD_IMAGE_COLOR 载入图像为三通道
3.
cvCreateImage(CvSize size, int depth, int channels)
功能:创建图片
参数1:图片宽、高
参数2:图片深度
IPL_DEPTH_8U - 无符号8位整型
IPL_DEPTH_8S - 有符号8位整型
IPL_DEPTH_16U - 无符号16位整型
IPL_DEPTH_16S - 有符号16位整型
IPL_DEPTH_32S - 有符号32位整型
IPL_DEPTH_32F - 单精度浮点数
IPL_DEPTH_64F - 双精度浮点数
参数3:一个元素的通道数(1、2、3)
4.
cvCvtColor( const CvArr* src, CvArr* dst, int code )
功能:颜色转换
参数1:源图片
参数2:目标图片
参数3:转换模式
CV_BGR2GRAY 转换为灰度图 (des是单通道图片)
5.
cvThreshold( const CvArr* src, CvArr* dst, double threshold, double max_value, int threshold_type )
功能:图片二值化(只有黑色和白色)
参数1:src 源图片,单通道灰度图
参数2:dst 目标图片,单通道灰度图
参数3:threshold 阈值
参数4:max_value 使用 CV_THRESH_BINARY 和 CV_THRESH_BINARY_INV 的最大值。
参数5:threshold_type 阈值类型
CV_THRESH_BINARY =0 大于阈值的像素设为最大值,小于阈值的设为最小值
CV_THRESH_BINARY_INV =1 大于阈值的像素设为最小值,小于阈值的像素设为最大值
CV_THRESH_TRUNC =2 大于阈值的像素设为阈值,小于阈值的像素保持原色
CV_THRESH_TOZERO =3 大于阈值的像素保持原值,小于阈值的像素设为0
CV_THRESH_TOZERO_INV=4 大于阈值的像素设为0,小于阈值的像素保持原值
3.代码
#include<opencv2/opencv.hpp> using namespace std; using namespace cv; //建立指针 //源图像: IplImage *SrcImage1=NULL, *SrcImage2=NULL; //二值图: IplImage *BinaryImage=NULL; //灰度图: IplImage *GrayImage1=NULL, *GrayImage2=NULL, *GrayImage3=NULL; //源图片加载地址 const char *SrcImageName1="C:\\picture\\biao1.jpg"; const char *SrcImageName2="C:\\picture\\biao2.jpg"; //图片储存地址 const char *SaveBinaryPath="C:\\picture\\binary1.jpg"; //图像窗口名称 const char *BinaryWindowName="二值图"; int main() { //读取原图 SrcImage1=cvLoadImage(SrcImageName1,CV_LOAD_IMAGE_UNCHANGED); SrcImage2=cvLoadImage(SrcImageName2,CV_LOAD_IMAGE_UNCHANGED); //创建灰度图 GrayImage1=cvCreateImage(cvGetSize(SrcImage1),IPL_DEPTH_8U,1); GrayImage2=cvCreateImage(cvGetSize(SrcImage2),IPL_DEPTH_8U,1); GrayImage3=cvCreateImage(cvGetSize(SrcImage1),IPL_DEPTH_8U,1); //变成灰度图 cvCvtColor(SrcImage1,GrayImage1,CV_BGR2GRAY); cvCvtColor(SrcImage2,GrayImage2,CV_BGR2GRAY); //检测差值 cvAbsDiff(GrayImage1,GrayImage2,GrayImage3); //创建二值图 BinaryImage=cvCreateImage(cvGetSize(GrayImage3),IPL_DEPTH_8U,1); //图像二值化 cvThreshold(GrayImage3,BinaryImage,35,255,CV_THRESH_BINARY); //创建窗口 cvNamedWindow(BinaryWindowName,CV_WINDOW_AUTOSIZE); //显示 cvShowImage(BinaryWindowName,BinaryImage); //保存 cvSaveImage(SaveBinaryPath,BinaryImage); //等待按键事件 cvWaitKey(); //释放 cvDestroyWindow(BinaryWindowName); cvReleaseImage(&SrcImage1); cvReleaseImage(&SrcImage2); cvReleaseImage(&BinaryImage); cvReleaseImage(&GrayImage1); cvReleaseImage(&GrayImage2); cvReleaseImage(&GrayImage3); return 0; }
4.处理结果
相关文章推荐
- 按右键另存图片只能存BMP
- photoshop去除图片上的水印
- upload上传单张图片
- 图片引发的溢出危机(图)
- C# WinForm控件对透明图片重叠时出现图片不透明的简单解决方法
- C#实现把彩色图片灰度化代码分享
- C#将图片和字节流互相转换并显示到页面上
- C#监控文件夹并自动给图片文件打水印的方法
- 纯CSS实现的当鼠标移上图片添加阴影效果代码
- 如何使用C#从word文档中提取图片
- C#实现打开画图的同时载入图片、最大化显示画图窗体的方法
- C#图片添加水印的实现代码
- 随鼠标移动的图片或文字特效代码
- CSS 图片横向排列实现代码
- C#实现将Email地址转成图片显示的方法
- C#实现图片加相框的方法
- 超级经典一套鼠标控制左右滚动图片带自动翻滚
- 用css实现图片垂直居中的使用技巧
- 一起动手编写Android图片加载框架
- C++实现读取图片长度和宽度