如何将字母的灰色图像转换为二进制而不丢失主轮廓?

Hao*_*est 2 c opencv image-processing

我有一个小的灰度图像,上面有一个数字.为了尝试我的OCR方法,我必须将其转换为二进制.

如果我使用带有127作为阈值的cvThreshold,由于数字骨架周围的渐变,图像看起来全部搞砸了.我试过但在应用阈值之前找不到任何图像锐化功能.

有人有指针吗?

原始灰度图像在此输入图像描述 这很粗糙.

编辑:二进制,我的意思是二进制图像,其中图像中的像素是0(黑色)或255(白色).

EDIT2:哦,看着修改日志让我傻笑.

kar*_*lip 6

首先使用阈值变量.您可以找到满足您的结果,而无需向您的应用程序添加任何其他处理.使用120,110或100怎么样?

无论如何,我没有得到与使用127作为参数相同的输出.也许你正在做一些不同的事情.检查我的代码:

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

cvThreshold(input_img, input_img, 127, 255, CV_THRESH_BINARY);

if( !cvSaveImage("out.png", input_img) )
{
    std::cout << "ERROR: Failed to write image file" << std::endl;
}    

cvReleaseImage(&input_img);
Run Code Online (Sandbox Code Playgroud)

输入:在此输入图像描述 输出:在此输入图像描述