我是OpenCV和圖像處理的新手,我不知道如何解決我的問題。 我有一張在iPhone中製作的文檔的照片,我想將該文檔轉換成黑白色。我試圖使用閾值,但文本不是很好(有點模糊和不可讀)。我希望文字看起來與原始圖像相同,只有黑色,背景是白色。我能做什麼? P.S.當我對文件的一部分進行照片時,文字很大,然後結果就OK了。用OpenCV將圖像文件轉換成黑白圖像
我將不勝感激任何幫助。
下面是我使用例如圖像和結果:
我是OpenCV和圖像處理的新手,我不知道如何解決我的問題。 我有一張在iPhone中製作的文檔的照片,我想將該文檔轉換成黑白色。我試圖使用閾值,但文本不是很好(有點模糊和不可讀)。我希望文字看起來與原始圖像相同,只有黑色,背景是白色。我能做什麼? P.S.當我對文件的一部分進行照片時,文字很大,然後結果就OK了。用OpenCV將圖像文件轉換成黑白圖像
我將不勝感激任何幫助。
下面是我使用例如圖像和結果:
閾值圖像用於不同的目的。
如果你只是想把它轉換成黑白圖像就做到這一點。使用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");
對不起,但我忘記寫了,我在iPhone上使用OpenCV並使用objective-c,而我沒有imread函數。 –
這不是黑白圖像,而是灰度圖像。錯誤的答案 – DanielHsH
我學嘗試,可能還會多一點比你讀:
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);
感謝您的回覆。這有點好,但不是超級。沒有改變文本而僅僅刪除背景的可能性嗎?恐怕我不能做太多,因爲該圖像的分辨率僅爲720x960像素,質量不太好。 –
你可以爲它編寫一個算法。迭代灰度圖像的像素,用白色像素代替對應於背景顏色的像素(或接近該特定顏色的像素)。 – karlphillip
好的,謝謝,我會嘗試。 –
使用自適應閾值高斯這裏是一個不錯的主意。這也將提高圖像中寫入的文本的質量。 你可以做到這一點僅通過進行命令:
AdaptiveThreshold(src_Mat, dst_Mat, Max_value, Adaptive_Thresholding_Method, Thresholding_type, blocksize, C);
的可能重複[RGB轉換2黑白OpenCV中白(http://stackoverflow.com/questions/1585535/convert-rgb-2-black -white-in-opencv) – karlphillip
順便說一句,我剛剛建議的鏈接是Google的第一個結果:'opencv black and white' – karlphillip
我試過這個解決方案,但結果並不好。我的圖像有點模糊,因此結果可能不好,但我不知道如何改進。我用腐蝕,但也沒有成功。 –