作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我刚开始学习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/
我是一名优秀的程序员,十分优秀!