我正在使用 SURF 算法将两个图像与 OpenCV 进行匹配。我得到了关键点。
现在我想用随机颜色的圆圈绘制这些关键点。
我知道如何使用函数 cvCircle 在 OpenCV 中画一个圆,但颜色是用cvScalar(r,g,b)
.
我希望图像中关键点圆圈的颜色与其附近的圆圈不同。
OpenCV中的库函数cv::drawMatches()
有我想要的效果。但我不知道如何实现它。
谁能告诉我怎么画圆圈。
谢谢!
假设你想在 上绘制不同颜色的圆圈Mat image
。这是一种生成随机颜色的方法:
RNG rng(12345);
Mat image = Mat::zeros(500, 500, CV_8UC3); // change to the size of your image
for (int i = 0; i < circleNum; i++) {
Scalar color = Scalar(rng.uniform(0,255), rng.uniform(0, 255), rng.uniform(0, 255));
circle(image, center[i], radius[i], color, -1, 8, 0);
}
cv::drawKeypoints(matOriginal, keyPoints, matOriginal);
使用这种方法应该可以绘制您的匹配项。
只需生成一个随机数列表,然后将它们转换为 int 否则会出错:TypeError: Scalar value for argument 'color' is not numeric。所以将其转换为 int,然后为 circle 函数。
color1 = (list(np.random.choice(range(256), size=3)))
color =[int(color1[0]), int(color1[1]), int(color1[2])]
cv.circle(img3, (x1,y1), 2,color,2)
把你的图像放在你想画圆圈的地方。