感谢您提前阅读此内容。
我正在进行一项与信用卡OCR相关的项目,其中一步需要向已轮廓化的图像中填充颜色。
示例图像包括:
我的目标是将白色空间填充为黑色:
尽管看起来很简单,但我无法找到令人满意的解决方案。
我尝试使用findContours函数,但我发现它非常混乱。运行以下函数后:
我正在进行一项与信用卡OCR相关的项目,其中一步需要向已轮廓化的图像中填充颜色。
示例图像包括:
我的目标是将白色空间填充为黑色:
尽管看起来很简单,但我无法找到令人满意的解决方案。
我尝试使用findContours函数,但我发现它非常混乱。运行以下函数后:
findContours( cvMatImage, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cv::Point(0, 0) );
奇怪的是,不仅轮廓点没有被正确提取,而且原始输入图像似乎也反色了。
欢迎提出任何关于如何完成我的目标或如何正确使用findContours
函数的建议。
更新:
非常感谢您的宝贵意见。
实际上,我问题中包含的图像已经被二值化,并且我已经对该图像应用了“自适应阈值化”程序。
原始图像如下:http://i.stack.imgur.com/DkIKt.png
CGColorSpaceRef colorSpace = CGImageGetColorSpace(self.CGImage);
CGFloat cols = self.size.width;
CGFloat rows = self.size.height;
Mat cvMat(rows, cols, CV_8UC4); // 8 bits per component, 4 channels
CGContextRef contextRef = CGBitmapContextCreate(cvMat.data, // Pointer to data
cols, // Width of bitmap
rows, // Height of bitmap
8, // Bits per component
cvMat.step[0], // Bytes per row
colorSpace, // Colorspace
kCGImageAlphaNoneSkipLast |
kCGBitmapByteOrderDefault); // Bitmap info flags
CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows), self.CGImage);
CGContextRelease(contextRef);
CGColorSpaceRelease(colorSpace);
Mat cvImage_gray, cvImage_threshold;
cvtColor(cvImageOrg, cvImage_gray, CV_RGB2GRAY); //Binarize
adaptiveThreshold(cvImage_gray, cvImage_threshold, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, neighbor, threshRed); //Adaptive threshold