【问题标题】:Is it possible to display colored text on a Canny Edge frame?是否可以在 Canny Edge 框架上显示彩色文本?
【发布时间】:2019-10-25 22:43:54
【问题描述】:

请原谅我的问题,我对 OpenCV 很陌生。我在一个人数统计程序上使用精明的边缘检测,每次有人走进框架时,都会在人的中心放置一个 ID 点。在我应用代码生成精明边缘之前,我将 ID 显示为绿色,但是,精明边缘我看不到任何颜色。相反,ID 只是轮廓,仅此而已。我非常想保留颜色,因为它可以让黑白背景更容易看到。

这是我在 Canny Edge 发生后的帧图片

在左下角,您可以看到一些我想要着色的文本,但已被边缘更改。

是否可以结合 Canny Edge 检测显示彩色文本?

【问题讨论】:

  • 在c++中,可以通过copyto函数来完成。我不知道python中是否有相同的功能。
  • 边缘检测后渲染文本并将边缘图像转换为3通道图像。
  • 米卡说得很好。您可以通过这种方式解决您的问题:执行边缘检测,然后将输出(它是单通道图像)转换为彩色图像( gray2bgr 应该可以工作),然后使用您喜欢的颜色渲染您的文本。
  • @MauroDorni 如果我使用的是 OpenCV 4.1 版,我认为 gray2bgr 是不可能的,有没有其他方法可以将 1 通道图像转换为 3 通道图像?
  • 你确定吗? docs.opencv.org/4.1.0/de/d25/imgproc_color_conversions.html,这里有 cv.COLOR_BGR2GRAY

标签: python opencv edge-detection canny-operator


【解决方案1】:

我使用 opencv 4.0.1 进行了测试,它按预期工作:您可以将边缘输出图像转换为 bgr 图像,然后放入您需要的所有彩色元素。 这是一个如何做到这一点的小例子:

    import cv2 as cv
    img = cv.imread(filename, cv.IMREAD_COLOR) 
    img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

    filt = cv.medianBlur(img_gray, 9)
    filt = cv.blur(filt, (3, 3))

    edges = cv.Canny(filt, 10, 50)

    edges_bgr = cv.cvtColor(edges, cv.COLOR_GRAY2BGR)
    w,h = edges_bgr.shape[:2]
    center = (int(h/2), int(w/2))
    radius = 100
    cv.circle(edges_bgr, center, radius, (255,128,0), 3)

    font = cv.FONT_HERSHEY_SIMPLEX
    bottomLeftCornerOfText = center
    fontScale = 1
    lineType = 2

    cv.putText(edges_bgr,'Text with colors', 
                bottomLeftCornerOfText, 
                font, 
                fontScale,
                (0,128,255),
                lineType)

    cv.imshow("edges with colors", edges_bgr)

【讨论】:

  • 感谢您的澄清。我会投票,但我没有足够的声誉来投票。
  • 很高兴听到这个消息 :) 如果没问题,您可以接受我的回答,stackoverflow.com/help/someone-answers
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
  • 2011-07-17
  • 1970-01-01
  • 2012-06-19
  • 1970-01-01
  • 2017-04-19
相关资源
最近更新 更多