如何将矢量<point2f>显示为图像?

时间:2015-06-25 03:05:56

标签: c++ opencv

我刚开始学习opencv,我已经定义了一个像:

这样的向量
vector<Point2f> cornersB;

之后我做了一些计算,比如:goodFeaturesToTrack,cornerSubPix和calcOpticalFlowPyrLK使用cornerB。

现在我想显示cornerB以查看已经绘制的点,我的代码是:

pointmat = Mat(cornersB);
imshow("Window", pointmat);

但我得到错误说cvConvertImage中的通道数量不足(源图像必须有1,3或4个通道)。

任何人都可以教我如何在图像中显示cornerB的点数?
我只是想看点(白色点和黑色背景)。

1 个答案:

答案 0 :(得分:2)

更简单的是使用cv :: drawKeypoints

drawKeypoints( InputArray image, const std::vector<KeyPoint>& keypoints, InputOutputArray outImage,const Scalar& color=Scalar::all(-1), int flags=DrawMatchesFlags::DEFAULT );

在您的情况下,让我们将黑色图像定义为图像:

cv::Mat image(512,512,CV_8U)
image.setTo(0);

然后将cornerB转换为cv :: KeyPoint kp_cornerB并使用CV_RGB(255,255,255)将颜色定义为白色

std::vector<cv::KeyPoint> kp_cornerB ;
// TODO convert cornersB to kp_cornerB
cv::Mat pointmat;
cv::drawKeypoints(image, kp_cornerB, pointmat, CV_RGB(255, 255, 255));
imshow("Window", pointmat);

可以使用矢量上的for循环完成转换:

for(vector<Point2f>::const_iterator it = cornersB.begin();
        it != cornersB.end(); it++) {
    cv::KeyPoint kp(*it, 8);
    kp_cornerB.push_back(kp);
}

这里,值'8'是关键点的'大小'。