我正在使用OpenCV框架与XCode,并希望从cvMat或IplImage转换为UIImage,该怎么做?谢谢.
我想检测图像中的徽标以便将其删除,我有一个想法,即寻找具有大量像素然后移除的对象,另一个想法是遍历所有白色像素(我已经颠倒了我的图像)和寻找形成一个大区域的像素,然后删除这个区域,是否有任何算法比这更好,opencv中的哪些方法将帮助我检测大像素数的对象.
我正在项目中使用tesseract,并希望知道tesseract的最佳图像输入类型以提供最佳输出,Binary和TIFF是最好的输入还是还有别的东西?
我想从图像中检测文本区域作为tesseract OCR引擎的预处理步骤,当输入只是文本时引擎运行良好,但当输入图像包含非文本内容时它会下降,所以我想只检测图像中的文本内容,任何如何做到这一点的想法会有所帮助,谢谢.
我已经花了很多时间搜索如何从cv :: Mat或CvMat转换为CvArr,但没有任何收获,请帮助我,谢谢.
我的目标是从扫描的名片图像中删除任何非文本区域,但我不知道使用OpenCV执行该操作的步骤,我已按照这些步骤但不知道这是正确的,或者我也不知道注意图像中的任何变化(非文本区域仍然存在)任何想法将非常有用,谢谢.
1)将图像转换为灰度
2)二进制图像
3)反转颜色(cv :: bitwise_not)以获得白色像素文本
4)侵蚀图像(cv :: erode)
5)使用canny检测边缘
6)使用霍夫变换检测文本行(尚未)
码:
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);
Run Code Online (Sandbox Code Playgroud)