在以下代码中,我想使用dilate
函数,但我不知道如何将Mat
类转换为InputArray
和OutputArray
。你能救我吗?
使用此原型函数:
void dilate(InputArray src, OutputArray dst, InputArray kernel, Point anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue() )
这是我的代码:
#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;
}
答案 0 :(得分:19)
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));
答案 1 :(得分:2)
在下面的代码中我想使用扩展函数,但我没有 知道如何将Mat类转换为InputArray和OutputArray。能够 你帮我吗?
好吧,您可以使用Mat
作为Inputarray
/ Outputarray
参数而不进行投射。请参阅official docs。
还有here's人工OpenCV erode / delate教程。或者你可以使用 karlphillip的帖子中的样本。