gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 02:21:46 24 4
gpt4 key购买 nike

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

vector<Point2f> cornersB;

然后我做了一些计算,例如:goodFeaturesToTrack、cornerSubPix 和使用 cornersB 的 calcOpticalFlowPyrLK。

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

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

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

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

最佳答案

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

然后将 cornersB 转换为 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com