接着上回的来说,今天记录一下图像的二值化。
图像二值化的思路是:
加载图像 -> 转为灰度图 -> 转为二值化图-> 显示出来
加载图像与显示图像上一篇已经有讲了,这里不赘述;
转为灰度图:
g_pGrayImage = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1); //src是读入的图片
cvCvtColor(src, g_pGrayImage, CV_BGR2GRAY);
二值化:
g_pBinaryImage = cvCreateImage(cvGetSize(g_pGrayImage), IPL_DEPTH_8U, 1);
cvThreshold(g_pGrayImage, g_pBinaryImage, 95, 255, CV_THRESH_BINARY); //95代表阈值
下面是完整的代码:
/**
* Function: 显示一幅图像
* Author : 靳皓屹
* Date : 2017/02/28
**/
#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char** argv )
{
IplImage* src = cvLoadImage("cat.jpg",CV_LOAD_IMAGE_ANYCOLOR); // 打开图像
IplImage *g_pGrayImage = NULL , *g_pBinaryImage = NULL;
g_pGrayImage = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
cvCvtColor(src, g_pGrayImage, CV_BGR2GRAY);
g_pBinaryImage = cvCreateImage(cvGetSize(g_pGrayImage), IPL_DEPTH_8U, 1);
cvThreshold(g_pGrayImage, g_pBinaryImage, 95, 255, CV_THRESH_BINARY);
cvNamedWindow("src_im",CV_WINDOW_AUTOSIZE); //创建一个窗口
cvShowImage("src_im",src); //在窗口中显示图像
cvNamedWindow("bin_img",CV_WINDOW_AUTOSIZE); //创建一个窗口
cvShowImage("bin_img",g_pBinaryImage); //在窗口中显示图像
cvWaitKey(0);
}