簡體   English   中英

在OpenCV中將RGB轉換為黑白

[英]Convert RGB to Black & White in OpenCV

我想知道如何將RGB圖像轉換為黑白(二進制)圖像。

轉換后,如何將修改后的圖像保存到磁盤?

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);

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);

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;

在上面的例子中,128是閾值。

4.保存到磁盤

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

// C++
imwrite("image_bw.jpg", img_bw);

這似乎對我有用!

Mat a_image = imread(argv[1]);

cvtColor(a_image, a_image, CV_BGR2GRAY);
GaussianBlur(a_image, a_image, Size(7,7), 1.5, 1.5);
threshold(a_image, a_image, 100, 255, CV_THRESH_BINARY);

“二值化”圖像的一種簡單方法是與閾值進行比較:例如,您可以將矩陣中的所有元素與c ++中的opencv值進行比較

cv::Mat img = cv::imread("image.jpg", CV_LOAD_IMAGE_GRAYSCALE); 
cv::Mat bw = img > 128;

這樣,矩陣中大於128的所有像素現在都是白色,而小於128或等於的這些像素將是黑色

可選地,對我來說,給出好的結果就是應用模糊

cv::blur( bw, bw, cv::Size(3,3) );

之后您可以像以前一樣保存它:

cv::imwrite("image_bw.jpg", bw);

我在我的一篇博客文章中做了類似的事情。 顯示了一個簡單的C ++示例。

目的是使用開源cvBlobsLib庫檢測打印到微陣列載玻片上的斑點樣本,但是如上所述,圖像必須從顏色 - >灰度 - >黑色+白色轉換,以實現這一目的。

簡單的二進制閾值方法就足夠了

包括

#include <string>
#include "opencv/highgui.h"
#include "opencv2/imgproc/imgproc.hpp"

using namespace std;
using namespace cv;

int main()
{
    Mat img = imread("./img.jpg",0);//loading gray scale image
    threshold(img, img, 128, 255, CV_THRESH_BINARY);//threshold binary, you can change threshold 128 to your convenient threshold
    imwrite("./black-white.jpg",img);
    return 0;
}

您可以使用GaussianBlur來獲得平滑的黑白圖像。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM