我有这个代码。
#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
你能帮助我解释为什么腐蚀功能不起作用吗?
非常感谢你。
答案 0 :(得分:2)
您同时将erode
和dilate
方法称为:
dilate(image, dilate_im, Mat());
erode(image, erode_im, Mat());
src - 输入图像;通道数可以是任意的,但深度应该是CV_8U,CV_16U,CV_16S,CV_32F`或``CV_64F之一。
dst - 输出与src相同大小和类型的图像。
元素 - 用于侵蚀的结构元素; if element = Mat(),使用3 x 3矩形结构元素。
所以在不知不觉中你使用默认的3x3内核调用erode
和dilate
,但是在侵蚀的情况下,前景Text的宽度似乎小于3像素,这会过度使用由黑色和黑色输出。