opencv程序四:图像二值化
来源:互联网 发布:凑数小软件 编辑:程序博客网 时间:2024/06/05 21:50
根据第一篇创建项目并添加两个文件
程序如下
// 7ErZhiHua.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"//图像的二值化 #include <opencv2/opencv.hpp> using namespace std; //隐藏控制台窗口 #pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") IplImage *g_pGrayImage = NULL; IplImage *g_pBinaryImage = NULL; const char *pstrWindowsBinaryTitle = "二值图"; void on_trackbar(int pos) { // 转为二值图 cvThreshold(g_pGrayImage, g_pBinaryImage, pos, 255, CV_THRESH_BINARY); // 显示二值图 cvShowImage(pstrWindowsBinaryTitle, g_pBinaryImage); } int main( int argc, char** argv ) { const char *pstrWindowsSrcTitle = "原图"; const char *pstrWindowsHuiTitle = "灰度图"; const char *pstrWindowsToolBarName = "二值图阈值"; // 从文件中加载原图 IplImage *pSrcImage = cvLoadImage("zjk2.jpg", CV_LOAD_IMAGE_UNCHANGED); // 转为灰度图 g_pGrayImage = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U, 1); cvCvtColor(pSrcImage, g_pGrayImage, CV_BGR2GRAY); // 创建二值图 g_pBinaryImage = cvCreateImage(cvGetSize(g_pGrayImage), IPL_DEPTH_8U, 1); // 显示原图 cvNamedWindow(pstrWindowsSrcTitle, CV_WINDOW_AUTOSIZE); cvShowImage(pstrWindowsSrcTitle, pSrcImage);//显示灰度图 cvNamedWindow(pstrWindowsHuiTitle, CV_WINDOW_AUTOSIZE); cvShowImage(pstrWindowsHuiTitle, g_pGrayImage); // 创建二值图窗口 cvNamedWindow(pstrWindowsBinaryTitle, CV_WINDOW_AUTOSIZE); // 滑动条 int nThreshold = 0; cvCreateTrackbar(pstrWindowsToolBarName, pstrWindowsBinaryTitle, &nThreshold, 254, on_trackbar); on_trackbar(1); cvWaitKey(0); cvDestroyWindow(pstrWindowsSrcTitle); cvDestroyWindow(pstrWindowsBinaryTitle); cvReleaseImage(&pSrcImage); cvReleaseImage(&g_pGrayImage); cvReleaseImage(&g_pBinaryImage); return 0; }
一. 关键函数介绍
下面就介绍OpenCV中对图像进行二值化的关键函数——cvThreshold()。
函数功能:灰度图像进行阀值操作得到二值图像
函数原型:
void cvThreshold(
const CvArr* src,
CvArr* dst,
double threshold,
double max_value,
int threshold_type
);
函数说明:
第一个参数表示输入图像,必须为单通道灰度图。
第二个参数表示输出的边缘图像,为单通道黑白图。
第三个参数表示阈值(比较用的类似于帧间差分法里的阀值)
第四个参数表示最大值。(比较后赋值用的)
第五个参数表示运算方法。
在OpenCV的imgproc\types_c.h中可以找到运算方法的定义。
/* Threshold types */
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 */
};
注释已经写的很清楚了,因此不再用中文来表达了。
2程序中用的灰度处理的方法跟上一篇中直接加载图像时设置最后一个参数得到灰度处理的方法一样,只是这里想显示原图灰度图二值图比较一下所有用的这种方法
// 转为灰度图 g_pGrayImage = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U, 1); cvCvtColor(pSrcImage, g_pGrayImage, CV_BGR2GRAY);
顺便多学一个函数cvCvtColor
函数说明:
第一个参数表示输入图像。
第二个参数表示输出的图像
第三个参数表示转换方式
- opencv程序四:图像二值化
- OpenCV嵌入式图像处理(四)第一个OpenCV程序
- OpenCV嵌入式图像处理(四)第一个OpenCV程序
- opencv 图像识别程序
- OpenCV(四)图像算术、混合
- 【OpenCV】图像处理(四)图像金字塔
- C# OpenCV学习笔记四之图像二值化
- opencv入门学习之四: 灰度图像的二值化
- opencv程序二:缩放图像
- OpenCV(四)图像的基本操作
- OPENCV入门教程四:imread函数读入图像
- opencv(四)对图像处理
- 四.使用OpenCv采集图像及图像边缘检测
- OpenCV之四 ROI区域图像叠加&初级图像混合
- 【OpenCV】四通道图像复制到三通道图像上
- 【OpenCV图像处理】四、图像的几何变换(上)
- opencv学习心得(四)——opencv提取截获图像
- OpenCV【3】---二值化图像
- iOS 视图控制器的生命周期
- hdu 5015 233 Matrix(矩阵快速幂)
- 如何使用QSignalMapper
- HDU 1113 Word Amalgamation (map 容器 + string容器)
- hdu 5033 单调栈的维护
- opencv程序四:图像二值化
- 实验室第三周工作报告
- linkin大话设计模式--策略模式
- 浅拷贝与深拷贝
- VS2010 MySQ连接问题小结
- 服务器 libevent源码深度剖析一
- 归档
- iOS 8使用Touch ID进行身份认证
- ibus anthy--日语输入法