Helping using the dilate function OpenCV
-
16-06-2021 - |
문제
In the following code I want to use the dilate
function but I don't know how to cast a Mat
class into a InputArray
and OutputArray
. Can you help me?
Using this prototype function:
void dilate(InputArray src, OutputArray dst, InputArray kernel, Point anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue() )
Here's my code:
#include "opencv2/opencv.hpp"
using namespace cv;
int main(int, char**)
{
Mat edges;
VideoCapture cap(0); // open the default camera
if(!cap.isOpened()) // check if we succeeded
return -1;
for(;;)
{
Mat frame;
cap >> frame; // get a new frame from camera
cvtColor(frame, edges, CV_BGR2GRAY);
GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
//dilate(edges,edges,NULL);
Canny(edges, edges, 0, 30, 3);
imshow("edges", frame);
if(waitKey(30) >= 0) break;
}
// the camera will be deinitialized automatically in VideoCapture destructor
return 0;
}
해결책
There are examples all around Stack Overflow, like this:
int erosion_size = 6;
cv::Mat element = cv::getStructuringElement(cv::MORPH_CROSS,
cv::Size(2 * erosion_size + 1, 2 * erosion_size + 1),
cv::Point(erosion_size, erosion_size) );
cv::dilate(edges, edges, element);
cv::dilate(edges, edges, cv::Mat(), cv::Point(-1,-1));
다른 팁
in the following code I want to use the dilate function but I don't know how to cast a Mat class into a InputArray and OutputArray. Can you help me?
Well, you can use Mat
as Inputarray
/Outputarray
parameter without casting. See official docs.
And also here's offificial OpenCV erode/delate tutorial. Or you can you can use samples from karlphillip's post.
제휴하지 않습니다 StackOverflow