2017-04-02 9 views
0

私はこのコードを持っています。ディルートが正常に機能し、浸食が正しく出力されない

#include "opencv2/objdetect/objdetect.hpp" 
#include "opencv2/highgui/highgui.hpp" 
#include "opencv2/imgproc/imgproc.hpp" 
#include "opencv2/core/core.hpp" 
#include <opencv/cv.h> 
#include <iostream> 
#include <Windows.h> 


using namespace std; 
using namespace cv; 

int main(int, char**) 

{ 
Mat image = imread("text.tif", 0); 
Mat dilate_im = image.clone(); 
Mat erode_im = image.clone(); 

if (image.empty())//check if empty 
{ 
    printf("Image is not read! File is probably missing! Press any key to  exim program");//message for error 
    waitKey(); //10 second delay for showing message to user 
} 
else 
{ 

    namedWindow("Original", 1); 
    imshow("Original", image); 

    dilate(image, dilate_im, Mat()); 
    erode(image, erode_im, Mat()); 

    namedWindow("Dilate Image", 1); 
    imshow("Dilate Image", dilate_im); 

    namedWindow("Erode Image", 1); 
    imshow("Erode Image", erode_im); 

    waitKey(); 
} 
return 0; 
} 

dilate機能が働いて正しい画像を出力しているのに、erodeが機能せず、黒い画像が1つしか取得されません。

これが出力されます。

View the output of this program here

あなたは私を助けると侵食する機能が動作しない理由を説明していただけますか?

は事前にありがとうございました。

+0

出力がわかりました。テキストが壊れて消えました。あなたはテストのために別の入力を使用することができます。 – Micka

答えて

1

あなたは、両方のerodedilateメソッドを呼び出している:documentation 1として

dilate(image, dilate_im, Mat()); 
erode(image, erode_im, Mat()); 

SRC - 入力画像。チャネル数は任意ですが、深さはCV_8U、CV_16U、CV_16S、CV_32F`または `` CV_64Fのいずれかでなければなりません。

dst - srcと同じサイズとタイプの出力イメージです。

要素 - 侵食に使用される構造要素。要素= Mat()の場合、3×3の矩形の構造要素が使用されます

ので、無意識のうちにあなたはデフォルトの3×3のカーネルでerodedilateの両方を呼び出している、しかし、浸食の場合には、フォアグラウンドテキストの幅が3つの未満のピクセルのようです、黒の色でオーバー乗っことになるので、黒の出力。

+0

こんにちは、 私はこの記事を見た: http://docs.opencv.org/2.4/doc/tutorials/imgproc/erosion_dilatation/erosion_dilatation.html レターthinerを作るべきではないでしょうか。私の場合、それはそれらをより薄くする代わりに消去します。言い換えれば、私は別のマスク(と3×3ではない)を使用する場合、これは言葉でしょうか? – adamkwn

+0

3x3未満のカスタムマスクがうまくいくかもしれませんが、確かではありませんが、テストする必要があります – ZdaR

関連する問題