c++ - 如何将 vector <Point2f>显示为图像?

标签 c++ opencv

我刚刚开始学习opencv,我定义了一个 vector ,例如:

vector<Point2f> cornersB;

之后我使用cornerB进行了一些计算,例如:goodFeaturesToTrack、cornerSubPix和calcOpticalFlowPyrLK。

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

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

但我收到错误消息,指出 cvConvertImage 中的 channel 数错误(源图像必须有 1、3 或 4 个 channel )。

谁能教我如何在图像中显示角点 B 的点?
我只想查看点(白色的点和黑色的背景)。

最佳答案

更简单的是使用 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);

可以通过 vector 上的 for 循环来完成转换:

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

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

关于c++ - 如何将 vector <Point2f>显示为图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31040527/

相关文章:

c++ - 在 C++ 中将 -inf 和 inf 值过滤为 0

c++ - 如何正确比较 char 和 0x85?

c++ - 如何读取控制台输入并将其存储到 vector 字符串中

c++ - 为什么我们需要 crossCheckMatching 作为功能?

c++ - OpenCV:FFMPEG:编解码器 id 12 和格式不支持标记 'mp4/MP4

opencv - 编译 PCL 以与 OpenCV 一起使用

c++ - CoCreateInstance 在 Release 中工作得很好,但在调试中没有

c++ - 如何将字符串类型的 vector 元素作为参数传递给 pthread_create()?

python - 3D 平面拟合方法(C++ 与 Python)

python - 标签数量总是特征数量的 1/3