2011-07-06 178 views
2

我是OpenCV和圖像處理的新手,我不知道如何解決我的問題。 我有一張在iPhone中製作的文檔的照片,我想將該文檔轉換成黑白色。我試圖使用閾值,但文本不是很好(有點模糊和不可讀)。我希望文字看起來與原始圖像相同,只有黑色,背景是白色。我能做什麼? P.S.當我對文件的一部分進行照片時,文字很大,然後結果就OK了。用OpenCV將圖像文件轉換成黑白圖像

我將不勝感激任何幫助。

下面是我使用例如圖像和結果: enter image description here enter image description here

+0

的可能重複[RGB轉換2黑白OpenCV中白(http://stackoverflow.com/questions/1585535/convert-rgb-2-black -white-in-opencv) – karlphillip

+1

順便說一句,我剛剛建議的鏈接是Google的第一個結果:'opencv black and white' – karlphillip

+0

我試過這個解決方案,但結果並不好。我的圖像有點模糊,因此結果可能不好,但我不知道如何改進。我用腐蝕,但也沒有成功。 –

回答

0

閾值圖像用於不同的目的。

如果你只是想把它轉換成黑白圖像就做到這一點。使用openCV 2.2

cv::Mat image_name = cv::imread("fileName", 0); 

第二個參數0告訴讀取彩色圖像作爲黑白圖像。

如果你想保存爲黑白圖像文件。

代碼這個

cv::Mat image_name = cv::imread("fileName", 0); 
cv::imwrite(image_name, "bw_filename.jpg"); 
+0

對不起,但我忘記寫了,我在iPhone上使用OpenCV並使用objective-c,而我沒有imread函數。 –

+0

這不是黑白圖像,而是灰度圖像。錯誤的答案 – DanielHsH

1

我學嘗試,可能還會多一點比你讀:

IplImage * pRGBImg = 0; 
pRGBImg = cvLoadImage(input_file.c_str(), CV_LOAD_IMAGE_UNCHANGED); 
if(!pRGBImg) 
{ 
    std::cout << "ERROR: Failed to load input image" << std::endl; 
    return -1; 
} 

// Allocate the grayscale image 
IplImage * pGrayImg = 0; 
pGrayImg = cvCreateImage(cvSize(pRGBImg->width, pRGBImg->height), pRGBImg->depth, 1); 

// Convert it to grayscale 
cvCvtColor(pRGBImg, pGrayImg, CV_RGB2GRAY); 

// Dilate 
cvDilate(pGrayImg, pGrayImg, 0, 0.2); 

cvThreshold(pGrayImg, pGrayImg, 30, 255, CV_THRESH_BINARY | CV_THRESH_OTSU); 
cvSmooth(pGrayImg, pGrayImg, CV_BLUR, 2, 2); 

cvSaveImage("out.png", pGrayImg); 

enter image description here

+0

感謝您的回覆。這有點好,但不是超級。沒有改變文本而僅僅刪除背景的可能性嗎?恐怕我不能做太多,因爲該圖像的分辨率僅爲720x960像素,質量不太好。 –

+0

你可以爲它編寫一個算法。迭代灰度圖像的像素,用白色像素代替對應於背景顏色的像素(或接近該特定顏色的像素)。 – karlphillip

+0

好的,謝謝,我會嘗試。 –

0

使用自適應閾值高斯這裏是一個不錯的主意。這也將提高圖像中寫入的文本的質量。 你可以做到這一點僅通過進行命令:

AdaptiveThreshold(src_Mat, dst_Mat, Max_value, Adaptive_Thresholding_Method, Thresholding_type, blocksize, C); 
相關問題