2012-04-22 2 views
2

Эти вопросы следуют this one, у меня есть изображение, которое я хочу удалить из него, я подорвал изображение до тех пор, пока весь небольшой текст не исчезнет, ​​и останется только логотип , теперь у меня есть два изображения, исходное изображение и одно с логотипом, теперь, когда я пытаюсь вычесть два изображения, чтобы сформировать третий, он содержит только текст, что-то странное, логотип не удаляется но это описаностранная проблема при вычитании двух изображений

код:

cv::Mat final; 
cv::Mat greyMat = [self.imageView.image CVGrayscaleMat]; 
cv::Mat bwMat,erodedMat; 
cv::threshold(greyMat, bwMat, 128, 255, CV_THRESH_BINARY); 
cv::bitwise_not(bwMat, bwMat); 
cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(20, 12)); 
cv::erode(bwMat, erodedMat, element); 
cv::dilate(bwMat, erodedMat, bwMat);//I used this to restore all the missed components of the logo during erosion,bwMat in the last argument acts as a mask, i didn't sure of this 
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()); 
final=bwMat-erodedMat; 
+3

Что на ваш вопрос именно? –

+0

Пожалуйста, не отправляйте большие изображения напрямую. сжимать или изменять размер перед загрузкой. Трудно просматривать низкоскоростные соединения. –

ответ

1

Я думаю, что это происходит потому, что, когда вы размывать изображение, белая область ш rinked. Это стирает ваши письма, в то же время оно также сокращает площадь белого квадрата.

Итак, когда вы вычитаете, вы вычитаете усаженный квадрат из исходного квадрата, который оставляет вам границу.

Таким образом, в этом случае вам нужно выполнить противоположную функцию эрозии, то есть расширение. Он расширяет область белого. Это не приведет к возврату ваших писем, поскольку они уже стерты.

Но я не думаю, что вы не сможете полностью стереть белый квадрат, так как расширение не даст точного квадрата. Вы можете быть лучше, чем в своем вопросе, вот и все.

Проверьте эти рисунки ниже. Исходное изображение:

enter image description here

Теперь ниже результат с эрозией с последующим растяжением:

enter image description here

Они никогда не бывают same.So, когда вы вычитать их, будут артефакты.

Я объяснил другой метод в ответ на свой первый вопрос: how to detect region of large # of white pixels using opencv?

Смежные вопросы