Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将点的向量转换为Mat(OpenCV)_C++_Opencv_Image Processing - Fatal编程技术网

C++ 将点的向量转换为Mat(OpenCV)

C++ 将点的向量转换为Mat(OpenCV),c++,opencv,image-processing,C++,Opencv,Image Processing,我的问题很像一个。。。我试着从灰度图像中提取一个子矩阵,它是一个5点的多边形,然后把它转换成一个矩阵 这不起作用: std::vector<Point> vert(5); vert.push_back(pt1); vert.push_back(pt2); vert.push_back(pt3); vert.push_back(pt4); vert.push_back(pt5); Mat matROI = Mat(vert); 我使用OpenCV 2.4.61和C++。 多谢各位

我的问题很像一个。。。我试着从灰度图像中提取一个子矩阵,它是一个5点的多边形,然后把它转换成一个矩阵

这不起作用:

std::vector<Point> vert(5);
vert.push_back(pt1);
vert.push_back(pt2);
vert.push_back(pt3);
vert.push_back(pt4);
vert.push_back(pt5);

Mat matROI = Mat(vert);

我使用OpenCV 2.4.61和C++。 多谢各位

编辑:

我将重新表述我的问题:我的目标是获得正确的答案

我想我会把图像看作一个多边形,因为我有顶点的坐标,然后变换矩阵中有顶点的向量(cvMat)


我的想法是正确的,还是有更简单的方法来获取此子矩阵?

您的代码有两个问题:

第一:

std::vector<Point> vert(5);
使用两个通道创建一个10x1矩阵(从10个点的向量开始)。检查以下各项:

cout << "matROI.channels()=" << matROI.channels() << endl;
它将通过
matROI
传递到
cvConvertImage()
,其中包含以下代码(这会导致您看到的错误):

由于
matROI
是一个点列表,因此将其传递给
imshow()
没有意义。 相反,请尝试以下方法:

Mat img(image.rows, image.cols, CV_8UC1);
polylines(img, vert, true, Scalar(255)); // or perhaps 0
imshow("Window", img);
int c = waitKey(0);

谢谢你的回答。这样,它只显示一个小的黑色矩形。。。我说了5个点作为例子,实际上我有一个由10个点组成的多边形。与其给出一个虚假的例子,为什么你不说出你真正想要的?我将更改代码,使其适用于10个点。我更新了答案,以说明出现错误的原因,以及如何绘制由
vert
表示的多边形。如果我正确,则“多段线”函数将“仅”在图像中绘制多边形。既然多段线是一种空心绘图功能,我如何才能从那里到达垫子?我应该穿过矩阵e的直线和列,只包括多边形内的像素吗?这给了我错误的一面矢量<矢量>等高线;轮廓。推回(轮廓);多段线(roi、等高线、真值、标量(255)、CV_AA);Mat mask=cvCreateMat(img.rows、img.cols、CV_8UC1);对于(int i=0;i在将vert转换为Mat之后会出现什么代码?
Mat(vert)
不会导致调用
cvConvertImage()
。您的编辑应该是一个新问题。我已经解决了您提出的原始问题。即,您试图显示
matROI
,这是错误的。
cout << "matROI.channels()=" << matROI.channels() << endl;
imshow("Window", matROI);
if( src_cn != 1 && src_cn != 3 && src_cn != 4 )
    CV_ERROR( CV_BadNumChannels, "Source image must have 1, 3 or 4 channels" );
Mat img(image.rows, image.cols, CV_8UC1);
polylines(img, vert, true, Scalar(255)); // or perhaps 0
imshow("Window", img);
int c = waitKey(0);