2012-04-22 3 views
2

これらの質問は、this oneに続くものです。私はロゴを削除したい画像があります。小さなテキストがすべて消えてロゴだけが残ります今、私は2つの画像、元の画像とロゴだけのものを持っています。今度は2つの画像を差し引いて3つ目の画像を作成しようとすると、奇妙なことが起こります。ロゴは削除されませんそれが概説されています2枚の画像を差し引くと奇妙な問題が発生する

コード:

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

私はあなたがイメージを侵食するとき、白い領域はSHがあるので、これが起こると思いますリンクされた。これにより文字が消去され、同時に白い四角の領域も縮小されます。

したがって、減算すると、元の正方形から縮小された四角形が減算され、境界線は残ります。

この場合、侵食、すなわち膨張の反対の機能を行う必要があります。白い部分を拡大します。彼らは既に消してしまったのであなたの手紙を取り戻すことはありません。

しかし、膨張が正確な正方形を与えないので、私はあなたが完全に白い四角形を消去することができないとは思わない。あなたはあなたの質問よりもちょうど良いことがあります、それだけです。

下記の画像を確認してください。オリジナル画像:アーティファクトがあるだろう、彼らはあなたがそれらを引くときsame.Soされることはありません

enter image description here

enter image description here

は今、以下の拡張が続く浸食との結果です。

私はあなたの最初の質問への答えでは別の方法を説明しました:how to detect region of large # of white pixels using opencv?