扩张工作正常,侵蚀不能正确输出图像

时间:2017-04-02 09:07:13

标签: c++ opencv

我有这个代码。

#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;
}

虽然扩张功能正常工作并输出正确的图像,但侵蚀不起作用,我只得到一张黑色图像。

这是输出:

View the output of this program here

你能帮助我解释为什么腐蚀功能不起作用吗?

非常感谢你。

1 个答案:

答案 0 :(得分:2)

您同时将erodedilate方法称为:

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

根据documentation

  

src - 输入图像;通道数可以是任意的,但深度应该是CV_8U,CV_16U,CV_16S,CV_32F`或``CV_64F之一。

     

dst - 输出与src相同大小和类型的图像。

     

元素 - 用于侵蚀的结构元素; if element = Mat(),使用3 x 3矩形结构元素

所以在不知不觉中你使用默认的3x3内核调用erodedilate,但是在侵蚀的情况下,前景Text的宽度似乎小于3像素,这会过度使用由黑色和黑色输出。