如何在OpenCV中使用随机颜色绘制圆

如何在OpenCV中使用随机颜色绘制圆,opencv,random,colors,Opencv,Random,Colors,我正在使用SURF算法与OpenCV匹配两幅图像。 我拿到了钥匙点 现在我想用随机颜色圆圈画这些关键点 我知道如何使用函数cvCircle在OpenCV中绘制一个圆,但是颜色是用cvScalar(r,g,b)固定的 我想知道图像中关键点的圆的颜色与它附近的圆不同 OpenCV中的库函数cv::drawMatches()具有我想要的效果。但我不知道如何实现它 有谁能告诉我如何画圆圈吗 谢谢 cv::drawKeypoints(原始、关键点、原始) 用这种方法应该可以画出你的匹配 假设您想在Mat

我正在使用SURF算法与OpenCV匹配两幅图像。 我拿到了钥匙点

现在我想用随机颜色圆圈画这些关键点

我知道如何使用函数cvCircle在OpenCV中绘制一个圆,但是颜色是用
cvScalar(r,g,b)
固定的

我想知道图像中关键点的圆的颜色与它附近的圆不同

OpenCV中的库函数
cv::drawMatches()
具有我想要的效果。但我不知道如何实现它

有谁能告诉我如何画圆圈吗

谢谢

cv::drawKeypoints(原始、关键点、原始)


用这种方法应该可以画出你的匹配

假设您想在
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);
}
RNG-RNG(12345);
Mat image=Mat::零(500500,CV_8UC3);//更改图像的大小
对于(int i=0;i
只需生成一个随机数列表,然后将其转换为int,否则会出现错误: TypeError:参数“color”的标量值不是数字。所以把它转换成int,然后用函数表示圆

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)  

把你的图像放在你想画圆圈的地方。

这很好。我建议使用HSL或HSV颜色空间生成饱和度和/或强度最大的颜色,然后只更改色调和/或值,然后转换回RGB。它会让你的灰色变少。