标签:net int repr height change windows http jpg amp
函数功能:采用Canny方法对图像进行边缘检测
函数原型:
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 */
};
注释已经写的很清楚了,因此不再用中文来表达了。
二. 示例程序代码
下面给出对图像进行二值化的完整的源代码:
- #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 = "二值图(http://blog.csdn.net/MoreWindows)";
-
- 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 = "原图(http://blog.csdn.net/MoreWindows)";
- const char *pstrWindowsToolBarName = "二值图阈值";
-
-
- IplImage *pSrcImage = cvLoadImage("002.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(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;
- }
运行结果如下所示,读者可以到下载源文件和程序(Release版本,不用安装OpenCV也能使用),自己动手调试下阈值大小,看看生成的二值图有什么变化。
OpenCV还有个cvAdaptiveThreshold()函数,这个函数会使用Otsu算法(大律法或最大类间方差法)(注1)来计算出一个全局阈值,然后根据这个阈值进行二值化。
转载自http://www.oschina.net/question/565065_82704
OpenCV中对图像进行二值化的关键函数——cvThreshold()。
标签:net int repr height change windows http jpg amp
原文地址:http://www.cnblogs.com/Peit/p/6029046.html