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

时间:2013-10-16 09:58:56

标签: opencv random colors

我使用SURF算法将两个图像与OpenCV匹配。 我得到了关键点。

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

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

我希望图像中关键点的圆圈颜色与其附近的圆圈不同。

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

有谁能告诉我如何绘制圆圈。

谢谢!

3 个答案:

答案 0 :(得分:15)

假设您想在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);
}

答案 1 :(得分:5)

cv::drawKeypoints(matOriginal, keyPoints, matOriginal);

使用此方法应该可以绘制您的匹配。

答案 2 :(得分:1)

只需生成一个随机数列表,然后将其转换为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)  

将您的图片放在要绘制圆圈的位置。