C++ 帮助使用扩展函数OpenCV
在下面的代码中,我想使用C++ 帮助使用扩展函数OpenCV,c++,function,opencv,image-processing,mathematical-morphology,C++,Function,Opencv,Image Processing,Mathematical Morphology,在下面的代码中,我想使用explate函数,但我不知道如何将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=mo
explate
函数,但我不知道如何将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;
}
关于堆栈溢出,有很多例子: : 在下面的代码中,我想使用deflate函数,但我不想使用 知道如何将Mat类转换为输入阵列和输出阵列。可以 你能帮我吗 您可以使用
Mat
作为Inputarray
/Outputarray
参数,而无需强制转换。看
以及官方OpenCV侵蚀/delate教程。或者您可以使用karlphillip的帖子中的样本 Mat::copyTo似乎不是这样,因为编译器抱怨:
错误:调用“cv::Mat::copyTo(cv::Mat)”没有匹配的函数。注意:候选函数是:/usr/include/opencv2/core/core.hpp:1651:10:注意:void cv::Mat::copyTo(cv::OutputArray)const
你能解释最后一个函数的作用吗?函数的文档很好地解释了它。-1,它在文档中有效,但你没有链接它,而且答案不符合堆栈溢出标准。然而,链接自:->没有解释的代码很少有用。至少用一两句话来解释发生了什么事。
我知道你在上面评论中的问题没有得到回答,我尊重你对此感到不安并投了反对票的事实。另一方面,这个答案是2年前的,它是为了回答创建这个线程的人。从这个意义上说,我相信这个答案成功地解决了这个问题。答案有3行代码(1个变量声明和2个方法调用),因此完全没有必要注释每行代码的作用。也许我应该打电话给约翰,接受他对这件事的质疑…:p如果帖子旨在为其他用户提供未来价值,那么帖子的年龄以及是否被接受都不应影响您是否决定编辑它。如果你觉得这个答案应该保持原样,而不是那些原因(即,如果你还没有这样做的话,你会非常乐意把这个答案张贴到这个问题上),这是一件事,但是你可能不应该把这些原因作为你推理的要点。
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));