【问题标题】:How to draw circles with random colors in OpenCV如何在 OpenCV 中绘制随机颜色的圆圈
【发布时间】:2013-10-24 09:18:45
【问题描述】:

我正在使用 SURF 算法将两个图像与 OpenCV 进行匹配。 我已经得到了关键点。

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

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

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

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

谁能告诉我如何画圆圈。

谢谢!

【问题讨论】:

    标签: opencv random colors


    【解决方案1】:

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

    【讨论】:

    • 这很棒。我建议使用 HSL 或 HSV 颜色空间来生成具有最大饱和度和/或强度的颜色,然后仅更改色调和/或值,然后再转换回 RGB。它会让你的灰色减少。
    【解决方案2】:

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

    使用这种方法应该可以绘制您的匹配项。

    【讨论】:

      【解决方案3】:

      只需生成一个随机数列表,然后将它们转换为 int 否则会报错: TypeError:参数“颜色”的标量值不是数字。所以将其转换为 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)  
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-21
        • 1970-01-01
        • 1970-01-01
        • 2019-01-17
        • 2017-12-15
        • 2012-11-13
        • 2015-07-04
        • 2014-04-09
        相关资源
        最近更新 更多