моя цель - удалить любую нетекстовую область из отсканированного изображения визитной карточки, но я не знаю, как это сделать с помощью OpenCV, я выполнил эти шаги, но не знаю, правильно это или нет. не заметил никаких изменений в изображении (остались нетекстовые области) любая идея будет очень полезна, спасибо.
1) преобразовать изображение в оттенки серого
2) бинарное изображение
3) инвертировать цвета (cv::bitwise_not), чтобы текст был белым.
4) Стереть изображение (cv::erode)
5) обнаружить края, используя хитрость
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);