使用“cv::inRange”(OpenCV) 选择正确的 HSV 上下边界进行颜色检测

2023-11-25

I have an image of a coffee can with an orange lid position of which I want to find. Here is it image.

gcolor2 utility shows HSV at the center of the lid to be (22, 59, 100). The question is how to choose the limits of the color then? I tried min = (18, 40, 90) and max = (27, 255, 255), but have got unexpected result

这是Python代码:

import cv

in_image = 'kaffee.png'
out_image = 'kaffee_out.png'
out_image_thr = 'kaffee_thr.png'

ORANGE_MIN = cv.Scalar(18, 40, 90)
ORANGE_MAX = cv.Scalar(27, 255, 255)
COLOR_MIN = ORANGE_MIN
COLOR_MAX = ORANGE_MAX

def test1():
    frame = cv.LoadImage(in_image)
    frameHSV = cv.CreateImage(cv.GetSize(frame), 8, 3)
    cv.CvtColor(frame, frameHSV, cv.CV_RGB2HSV)
    frame_threshed = cv.CreateImage(cv.GetSize(frameHSV), 8, 1)
    cv.InRangeS(frameHSV, COLOR_MIN, COLOR_MAX, frame_threshed)
    cv.SaveImage(out_image_thr, frame_threshed)

if __name__ == '__main__':
    test1()

问题1:不同的应用程序使用不同的 HSV 尺度。例如 gimp 使用H = 0-360, S = 0-100 and V = 0-100。但OpenCV使用H: 0-179, S: 0-255, V: 0-255。这里我在 gimp 中得到的色调值为 22。所以我取了一半,即 11,并为其定义了范围。 IE(5,50,50) - (15,255,255).

问题2:而且,OpenCV 使用 BGR 格式,而不是 RGB。因此,更改将 RGB 转换为 HSV 的代码,如下所示:

cv.CvtColor(frame, frameHSV, cv.CV_BGR2HSV)

现在运行它。我得到的输出如下:

enter image description here

希望这就是你想要的。有一些错误检测,但它们很小,因此您可以选择最大的轮廓,即您的眼睑。

EDIT:

As 卡尔·菲利普在他的评论中告诉我们,添加新代码会很好。但只有一行的变化。所以,我想添加在 new 中实现的相同代码cv2模块,以便用户可以比较新模块的易用性和灵活性cv2 module.

import cv2
import numpy as np

img = cv2.imread('sof.jpg')

ORANGE_MIN = np.array([5, 50, 50],np.uint8)
ORANGE_MAX = np.array([15, 255, 255],np.uint8)

hsv_img = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

frame_threshed = cv2.inRange(hsv_img, ORANGE_MIN, ORANGE_MAX)
cv2.imwrite('output2.jpg', frame_threshed)

它给出与上面相同的结果。但代码要简单得多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用“cv::inRange”(OpenCV) 选择正确的 HSV 上下边界进行颜色检测 的相关文章

随机推荐

  • 编译 CUDA 示例出现构建错误

    我运行的是 Windows 7 64 位 带有 Visual Studio 2008 我安装了 CUDA 驱动程序和 SDK SDK 附带了很多示例 包括编译的可执行文件和源代码 编译后的可执行文件运行得非常好 当我打开 vc90 解决方案
  • jQuery Ajax:如何等到 *async* 请求成功完成后再继续?

    我在加快 ajax 速度时遇到问题and功能性的 这是伪 原型代码 function blah1 arg1 arg1 is an array roughly 10 elements var arr each arg1 function i
  • Laravel:Form::open() 中的 HTTPS

    我在我的登录中为我的网站使用 SSL Cloudflare HTTPS 因为我使用 Laravel 不会将我的网站链接转换为 SSL 版本 它显示http版本 我如何强制 Laravel 使用https for me 例如
  • 不安全的 JavaScript 尝试访问 Google Chrome 中的框架

    我们的网络应用程序 基于 HTML5 SVG 和 JS 在除 Google Chrome 之外的所有浏览器中运行良好 在 Google Chrome 中 正常的 javascript 事件运行良好 但是 附加到 iFrame 的所有 jav
  • PowerShell - Set-Culture 似乎没有改变任何东西

    我有一个云服务 Web 角色 需要在其上运行一些 PowerShell 以确保服务器始终设置为正确的区域性 en AU 原因是微软可以随时重置文化价值观 当我跑步时 Get Culture I get 1033 en US English
  • 从数组中删除多个索引

    我有一个数组 我想删除一堆索引 var arr 0 1 2 3 4 5 6 var rmIndices 1 4 5 从 arr 中删除索引 1 4 5 的最佳方法是什么 注意PermutationGenerator在 Swift 3 中将会
  • 使用 Python 的 Vcard 解析器

    我正在解析我的 vcard 信息 复制到 txt 文件 以提取name number并将其放入字典中 数据样本 BEGIN VCARD VERSION 2 1 N MEO Apoio FN Apoio MEO TEL CELL PREF 1
  • SQL Server 计算列

    我有两列 都是整数 Wins and Losses 我有一个计算列WinPercentage as a decimal 14 3 我希望这是 WinPercentage Wins Losses Wins 其语法是什么 CREATE TABL
  • 如何在 gtsummary 中向“未知”添加百分比

    我有一个连续变量 其中有很大比例的未知数 我的顾问要求我将百分比放在该栏中的旁边 这个 reprex 模仿了我想做的事情 library tidyverse library gtsummary trial gt included with
  • 在 JavaScript 中使用“prototype”与“this”?

    有什么区别 var A function this x function do something and var A function A prototype x function do something 这些例子有非常不同的结果 在查
  • python 与 __le__、__ge__ 的错误?

    是我还是Python对以下代码感到困惑 我希望 le 被称为a lt ab not ge usr bin env python2 class B object def ge self other print ge unexpectedly
  • 按行计算平均日期

    我希望按行获取平均日期 其中每行包含两个日期 最终我找到了一个方法 发布在下面 不过 我使用的方法似乎比较麻烦 有没有更好的办法 my data read table text OBS MONTH1 DAY1 YEAR1 MONTH2 DA
  • 错误:找不到函数“%>%”

    我正在 R 中运行一个示例 完成这些步骤 到目前为止一切正常 除了此代码产生错误 words lt dtm gt as matrix gt colnames gt function x x nchar x lt 20 错误 找不到函数 gt
  • 从 WAV 文件中解码 DTMF

    继我的先前的问题 我的目标是从 C 检测 WAV 文件中的 DTMF 音调 然而 我真的很难理解这是如何做到的 我知道 DTMF 使用频率组合 并且可以使用 Goertzel 算法 以某种方式 我抓取了 Goertzel 代码片段 并尝试将
  • 服务器端文件浏览

    我正在开发一个 Web 应用程序 它从一组文本文件中读取数据并将其映射到 MySQL 数据库 目前 该表单需要手动输入文件路径 但我想向该字段添加一个文件选择器 以使该部分的设置不那么繁琐 我找到的解决方案都允许选择单个文件 但我正在寻找一
  • 如何使用 Selenium 自动化 Firefox Mobile?

    我需要在 Firefox Mobile 中运行 Selenium 测试 有人能描述一个简单的方法来做到这一点吗 我的调查表明 Firefox 移动版不受支持Appium one two Firefox Desktop has built i
  • 通过获取每个子项的位置动态地将子项添加到 LinearLayout

    我在获取孩子的位置时遇到问题线性布局 首先 我动态添加一些按钮 然后尝试返回每个子项的索引并将其显示到TextView 我在这里分享代码 java源代码 private String categories private LinearLay
  • 使用 Sass 从媒体查询中扩展选择器

    我有一个项目类和一个紧凑的 修饰符 类 item item compact styles to make item smaller 这可以 不过 我想添加一个 media强制的查询 item当屏幕足够小时 类要紧凑 乍一看 这就是我试图做的
  • 向场景添加灯光没有效果

    我刚刚开始玩 Three JS 但我一开始就陷入困境 当我向场景添加灯光时 它没有任何效果 renderer new THREE WebGLRenderer camera new THREE PerspectiveCamera 45 Vie
  • 使用“cv::inRange”(OpenCV) 选择正确的 HSV 上下边界进行颜色检测

    I have an image of a coffee can with an orange lid position of which I want to find Here is it gcolor2 utility shows HSV