使用OpenCV将图像文档转换为黑白图像

时间:2011-07-06 10:28:16

标签: c image opencv photo

我是OpenCV和图像处理的新手,我不知道如何解决我的问题。 我有一张用iPhone制作的文档照片,我希望将该文档转换为黑白文档。我试图使用阈值,但文字不太好(有点模糊和不可读)。我想文字看起来和原始图像一样,只有黑色,而背景则是白色。我能做什么? 附:当我拍摄部分文档的照片时,文字很大,结果还可以。

我将不胜感激任何帮助。

以下是我使用的示例图像和结果: enter image description here enter image description here

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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");

答案 2 :(得分:0)

使用自适应高斯阈值处理是个好主意。这也将提高图像中写入的文本的质量。 你可以通过简单地给出命令来做到这一点:

AdaptiveThreshold(src_Mat, dst_Mat, Max_value, Adaptive_Thresholding_Method, Thresholding_type, blocksize, C);