在OpenCV中将RGB转换为黑白

moh*_*med 64 c c++ opencv image-processing computer-vision

我想知道如何将RGB图像转换为黑白(二进制)图像.

转换后,如何将修改后的图像保存到磁盘?

Jac*_*cob 140

AFAIK,您必须将其转换为灰度,然后将其阈值设置为二进制.

1.将图像作为灰度图像 读取如果您正在从磁盘读取RGB图像,则可以直接将其作为灰度图像读取,如下所示:

// C
IplImage* im_gray = cvLoadImage("image.jpg",CV_LOAD_IMAGE_GRAYSCALE);

// C++ (OpenCV 2.0)
Mat im_gray = imread("image.jpg",CV_LOAD_IMAGE_GRAYSCALE);
Run Code Online (Sandbox Code Playgroud)

2.将RGB图像im_rgb转换为灰度图像:否则,您必须将先前获得的RGB图像转换为灰度图像

// C
IplImage *im_rgb  = cvLoadImage("image.jpg");
IplImage *im_gray = cvCreateImage(cvGetSize(im_rgb),IPL_DEPTH_8U,1);
cvCvtColor(im_rgb,im_gray,CV_RGB2GRAY);

// C++
Mat im_rgb  = imread("image.jpg");
Mat im_gray;
cvtColor(im_rgb,im_gray,CV_RGB2GRAY);
Run Code Online (Sandbox Code Playgroud)

3.转换为二进制 您可以使用自适应阈值处理固定级别阈值处理将灰度图像转换为二进制图像.

例如,在C中,您可以执行以下操作(您也可以使用Mat和相应的函数在C++中执行相同操作):

// C
IplImage* im_bw = cvCreateImage(cvGetSize(im_gray),IPL_DEPTH_8U,1);
cvThreshold(im_gray, im_bw, 128, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);

// C++
Mat img_bw = im_gray > 128;
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,128是阈值.

4.保存到磁盘

// C
cvSaveImage("image_bw.jpg",img_bw);

// C++
imwrite("image_bw.jpg", img_bw);
Run Code Online (Sandbox Code Playgroud)