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

Nic*_*eak 5 random opencv colors

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

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

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

我希望图像中关键点的圆的颜色与它附近的圆不同.

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

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

谢谢!

Wan*_*ong 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);
}
Run Code Online (Sandbox Code Playgroud)

  • 这很棒.我建议使用HSL或HSV颜色空间生成饱和度和/或强度最大的颜色,然后仅改变色调和/或值,然后转换回RGB.它会让你的灰色更少. (3认同)

ret*_*top 5

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

使用这种方法,你应该可以绘制你的比赛.