我的目标是从扫描的名片图像中删除任何非文本区域,但我不知道使用OpenCV执行该操作的步骤,我已按照此步骤操作但不知道这是正确的还是不是我也没有注意到图像中的任何变化(非文本区域仍然存在),任何想法都将非常有帮助,谢谢。如何使用OpenCV从名片中删除非文本区域?
1)将图像转换为灰度
2)二进制文件图像
3)反转,以便具有一个白色像素文本
4的颜色(CV :: bitwise_not))侵蚀图像(CV ::侵蚀)
5)使用检测的边缘的Canny
6)使用hough变换(尚未检测文本行)
代码:
cv::Mat greyMat = [self.imageView.image CVGrayscaleMat];
cv::Mat bwMat;
cv::threshold(greyMat, bwMat, 128, 255, CV_THRESH_BINARY);
cv::bitwise_not(bwMat, bwMat);
cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(2, 1));
cv::erode(bwMat, bwMat, element);
std::vector<cv::Point>points;
cv::Mat_<uchar>::iterator it=bwMat.begin<uchar>();
cv::Mat_<uchar>::iterator end=bwMat.end<uchar>();
for (; it!=end; ++it)
if (*it)
points.push_back(it.pos());
cv::RotatedRect box=cv::minAreaRect(cv::Mat(points));
plImage* smothedImage=new IplImage(bwMat);
cvSmooth(smothedImage, smothedImage);
cvCanny(smothedImage, smothedImage, 10, 100);
你尝试过什么?你可以尝试缩小你的问题的具体内容,否则我想这将被关闭为“非建设性的” – 2012-04-21 00:11:53
我更新了我的问题 – chostDevil 2012-04-21 11:49:38
请提供一个样本图像,以及@PatrickJones – karlphillip 2012-04-21 14:25:10