在opencv中读取像素的HSV值

2023-12-13

你会如何读取 HSV 格式而不是 RGB 格式的像素值?下面的代码以 RGB 格式读取圆心的像素值。 HSV 的读数值有很大差异吗?

int main(int argc, char** argv)
{
    //load image from directory
    IplImage* img = cvLoadImage("C:\\Users\\Nathan\\Desktop\\SnookerPic.png");


    IplImage* gray = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);
    CvMemStorage* storage = cvCreateMemStorage(0);

    //covert to grayscale
    cvCvtColor(img, gray, CV_BGR2GRAY);

    // This is done so as to prevent a lot of false circles from being detected
    cvSmooth(gray, gray, CV_GAUSSIAN, 7, 7);

    IplImage* canny = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
    IplImage* rgbcanny = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3);
    cvCanny(gray, canny, 50, 100, 3);

    //detect circles
    CvSeq* circles = cvHoughCircles(gray, storage, CV_HOUGH_GRADIENT, 1, 35.0, 75, 60,0,0);
    cvCvtColor(canny, rgbcanny, CV_GRAY2BGR);

    //draw all detected circles
    for (int i = 0; i < circles->total; i++)
    {
         // round the floats to an int
         float* p = (float*)cvGetSeqElem(circles, i);
         cv::Point center(cvRound(p[0]), cvRound(p[1]));
         int radius = cvRound(p[2]);
         //uchar* ptr;
         //ptr = cvPtr2D(img, center.y, center.x, NULL);
         //printf("B: %d G: %d R: %d\n", ptr[0],ptr[1],ptr[2]);
         CvScalar s;

         s = cvGet2D(img,center.y, center.x);//colour of circle
        printf("B: %f G: %f R: %f\n",s.val[0],s.val[1],s.val[2]);

         // draw the circle center
         cvCircle(img, center, 3, CV_RGB(0,255,0), -1, 8, 0 );

         // draw the circle outline
         cvCircle(img, center, radius+1, CV_RGB(0,0,255), 2, 8, 0 );

         //display coordinates
         printf("x: %d y: %d r: %d\n",center.x,center.y, radius);

    }

    //create window
    //cvNamedWindow("circles", 1);
    cvNamedWindow("SnookerImage", 1);
    //show image in window
    //cvShowImage("circles", rgbcanny);
    cvShowImage("SnookerImage", img);

    cvSaveImage("out.png", img);
    //cvDestroyWindow("SnookerImage");
    //cvDestroyWindow("circles");
    //cvReleaseMemStorage("storage");
    cvWaitKey(0);

    return 0;
}

如果你使用C++接口,你可以使用

cv::cvtColor(img, img, CV_BGR2HSV);

See cvtColor 的文档了解更多信息。

Update:

以缓慢的方式读取和写入像素(假设 HSV 值存储为cv::Vec3b (doc))

cv::Vec3b pixel = image.at<cv::Vec3b>(0,0); // read pixel (0,0) (make copy)
pixel[0] = 0; // H
pixel[1] = 0; // S
pixel[2] = 0; // V
image.at<cv::Vec3b>(0,0) = pixel; // write pixel (0,0) (copy pixel back to image)

使用image.at<...>(x, y) (doc,向下滚动很多)如果你想操作每个像素,符号是相当慢的。里面有一篇文章有关如何更快地访问像素的文档。您也可以像这样应用迭代器方法:

cv::MatIterator_<cv::Vec3b> it = image.begin<cv::Vec3b>(),
                    it_end = image.end<cv::Vec3b>();
for(; it != it_end; ++it)
{
    // work with pixel in here, e.g.:
    cv::Vec3b& pixel = *it; // reference to pixel in image
    pixel[0] = 0; // changes pixel in image
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在opencv中读取像素的HSV值 的相关文章

  • 如何解决 Python 'Pyzbar' 库的导入错误?

    我刚刚开始熟悉 Pyzbar 库 但是当使用decode方法我得到一个错误 这是代码 import cv2 import numpy as np import pyzbar code image cv2 imread C Users Ace
  • OpenCV findContours 破坏源图像

    我编写了一个在单通道空白图像中绘制圆形 直线和矩形的代码 之后 我只需找出图像中的轮廓 就可以正确获取所有轮廓 但找到轮廓后 我的源图像变得扭曲 为什么会出现这种情况 任何人都可以帮我解决这个问题 我的代码如下所示 using namesp
  • brew 链接 jpeg 问题

    我正在尝试安装opencv在 Mac OSX Lion 上 brew install opencv 我收到以下错误 以及其他一些类似的错误 Error The linking step did not complete successful
  • 如何在opencv python中为图像添加边框

    如果我有如下图所示的图像 如何在图像周围添加边框 以便最终图像的整体高度和宽度增加 但原始图像的高度和宽度保持在中间 下面的代码添加了一个大小恒定的边框10像素到原始图像的所有四个边 对于颜色 我假设您想要使用背景的平均灰度值 这是我根据图
  • OpenCV的拼接模块可以拼接平行运动相机拍摄的图像吗?

    我想知道是否缝合 http docs opencv org modules stitching doc stitching html http docs opencv org modules stitching doc stitching
  • 使用opencv计算深度视差图

    我无法使用 opencv 从视差图计算深度 我知道两个立体图像中的距离是用以下公式计算的z baseline focal disparity p 但我不知道如何使用地图计算视差 我使用的代码如下 为我提供了两个图像的视差图 import n
  • 在加载“cv2”二进制扩展期间检测到递归

    我有一个小程序 在 pyinstaller 编译后返回 opencv 错误 但无需编译即可工作 我在 Windows 10 上使用 Python 3 8 10 Program 导入 pyautogui将 numpy 导入为 np导入CV2
  • 如何使用 Python 将我的 GoPro Hero 4 相机直播连接到 openCV?

    我在尝试从我的新 GoPro Hero 4 相机捕获实时流并使用 openCV 对其进行一些图像处理时遇到麻烦 这是我的试用 创建的窗口上没有显示任何内容 import cv2 import argparse import time imp
  • 找出圆周上像素坐标的算法

    如果我知道圆心 圆半径和垂直角的像素坐标 如何找出圆圆周上一定角度的像素值 基本上 我试图在不同的时间绘制时钟的指针 1点 2点等 Let h是浮点数形式的小时 h 2 25将是 02 15 等 在 0 到 12 之间 cX cY 是中心的
  • 使用Python的工业视觉相机[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • OpenCV 仅围绕大轮廓绘制矩形?

    第一次发帖 希望我以正确的方式放置代码 我正在尝试检测和计算视频中的车辆 因此 如果您查看下面的代码 我会在阈值处理和膨胀后找到图像的轮廓 然后我使用 drawContours 和矩形在检测到的轮廓周围绘制一个框 我试图在 drawCont
  • 来自连接到远程机器的相机的 Opencv 流

    我正在用 python 开发一个 wx 应用程序 用于流式传输和显示来自两个不同网络摄像头的视频 这工作正常 但现在我需要在不同的场景中执行此操作 其中两个摄像头连接在通过网络连接的 Windows 上运行的单独计算机中 我的应用程序将在机
  • opencv形态扩张滤波器作为最大滤波器

    就像中值滤波器的定义一样 我可以将 最大滤波器 定义为局部窗口 例如dst x y max 3x3 局部窗口像素 但我在opencv中找不到这样的过滤器 最接近的是 dilate 函数 然后我使用 dilate 函数的默认配置 但结果不正确
  • opencv 2.3.* 读取不工作

    我无法让 imread 工作 与这个人有同样的问题 OpenCV imwrite 2 2 在 Windows 7 上导致异常 并显示消息 OpenCV 错误 未指定错误 无法找到指定扩展名的编写器 https stackoverflow c
  • 指纹奇异点检测

    我正在尝试确定指纹的核心点和增量点 我正在使用庞加莱指数方法 但我无法成功检测到这一点 而且我不明白为什么 First I divide the image in 15x15 blocks then I calculate the x an
  • 使用 ffmpeg 或 OpenCV 处理原始图像

    看完之后维基百科页面 http en wikipedia org wiki Raw image format原始图像格式 是任何图像的数字负片 为了查看或打印 相机图像传感器的输出具有 进行处理 即转换为照片渲染 场景 然后以标准光栅图形格
  • 为什么我无法在 Mac 12.0.1 (Monterey) 上使用 pip 安装 OpenCV? [复制]

    这个问题在这里已经有答案了 当我尝试使用 python pip 安装 OpenCV 时 它显示了以下内容 Remainder of file ignored Requirement already satisfied pip in Libr
  • 从图像坐标获取对象的世界坐标

    I have been following this http docs opencv org modules calib3d doc camera calibration and 3d reconstruction html docume
  • OpenCV 错误:connectedComponents_sub1 中断言失败 (L.channels() == 1 && I.channels() == 1) [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我在 OpenCV python 中遇到以下错误 并用 google 搜索了很多 但无法解决 如果有人能为我提供一些线索
  • opencv人脸检测示例

    当我在设备上运行应用程序时 应用程序崩溃并显示以下按摩 java lang UnsatisfiedLinkError 无法加载 detector based tracker findLibrary 返回 null 我正在使用 OpenCV

随机推荐

  • MySQL:我需要每天显示每个用户从 1 到最大 n 个帖子

    我有一张包含用户帖子的表 我需要每天显示每个用户从 1 到最多 n 个帖子 Example post id user id post datetime post text 1 100 2012 12 01 01 00 00 lorem ip
  • TextOptions.TextFormattingMode 影响粗体文本

    我遇到了问题将某些文本的字体粗细设置为粗体使其小于普通字体粗细文本 我发现这是因为我将 TextFormattingMode 设置为 Display 如果 TextFormattingMode 设置为 理想 则不会出现此问题 例如 以下代码
  • 在不使用模块的情况下在 Jest 中跨多个测试配置 jsdom

    我想在无法导出模块的环境中测试脚本 我已经安装了 Jest 版本 23 1 0 并且我的包中没有其他包package json文件 使用jsdom 旧 API我想出了一个按预期工作的解决方案 脚本 js var exVar test 脚本
  • 获取没有标题的窗口的句柄.. (C#)

    我们怎样才能得到一个没有标题的窗口的句柄呢 有没有一种方法可以枚举桌面上的所有窗口并过滤没有标题的窗口 在我的例子中 只有一个 并获取它的句柄 或者通过指定其他属性 例如具有标题的窗口特定按钮或列表框等 这应该可以做到 using Syst
  • 统计lucene索引中的词频

    有人可以帮我找到所有lucene索引中的词频吗例如 如果文档 A 有 3 个单词 B 文档 C 有 2 个 我想要一个方法返回 5 显示单词 B 在所有 lucene 索引中的频率 这个问题已经被问过很多次了 获取 Lucene 中的术语频
  • 如何在WebLogic中设置jar的顺序?

    在我的应用程序中我使用乔达时间2 0 但在我的WebLogic路径中有库 Joda Time 1 2 如何更改顺序并告诉 WebLogic 使用我的库 现在它使用自己的库 而不是我的 我刚刚向 Joda Time 2 0 添加了 Maven
  • 一个视图中的两个 GridView

    我用 Yii2 框架开发了一个网站 我需要一些帮助 我需要在我的页面之一中显示两个具有不同数据的不同 GridView 我设法显示表格及其数据 但是当我从一个表格的页面切换到另一个表格的页面时 其他表格的页面也会发生变化 我怎样才能在一张桌
  • 如何在 MATLAB 中检索选定的文本?

    MATLAB 具有多种选择敏感功能 例如 如果您选择一些文本并按 F9 它将评估您的选择 除非您重新映射键盘设置 我希望能够通过快捷方式复制此功能 例如 我想单击显示当前选择的快捷方式 我的快捷回调是disp GetSelection 但什
  • 如何为承诺的解决添加指定的延迟

    我想定义一个函数 它接受一个承诺 并返回一个相同的承诺 除了返回的承诺解决任意超时问题 我的代码如下所示 但我不确定我是否能捕捉到诸如拒绝之类的一切 Returns a promise identical to promise except
  • cocos2d中重复背景有黑边!

    我正在尝试为我的 iPhone 应用程序设置平铺 重复背景 代码 有效 因为背景按应有的方式重复 但每次重复周围似乎都有黑色边框 我不知道为什么 图像恰好是 200x200 下面是它的外观和代码的屏幕截图 if self super ini
  • 通过网络发送密码

    因此 我正在开发一个移动平台应用程序 我希望用户可以通过网络进行身份验证 我想知道确保安全的最佳方法 用户将 HTTP 密码发送到 php 服务器 该服务器根据同一服务器上的 mysql 数据库进行身份验证 显然我不想通过互联网以纯文本形式
  • 奇怪的 Apache2.2 SVN 错误,“预期存储库格式‘3’或‘5’;发现格式‘9’”

    我有一个存储库 我可以使用 TortoiseSVN 从运行 Subversion win32 服务的同一台计算机上访问该存储库 并且它已经工作了一段时间了 我决定尝试设置 mod dav svn 以便能够从其他地方获取它 当我尝试访问它时
  • 如何在Android M中检查单个请求的多个权限?

    我想使用 android permission CAMERA android permission WRITE EXTERNAL STORAGE 在单个请求中使用 ActivityCompat requestPermissions Acti
  • 使用 NSWorkspace 关闭文件

    我的要求是打开一个 pdf ppt 等文件并在 20 分钟后关闭它 感谢 NSWorkspace 我能够正确打开这些文件 但我怎样才能关闭这些文件呢 NSWorkspace 似乎没有 close 方法 NSWorkspace只是要求操作系统
  • 从Python中线程中的函数获取返回值[重复]

    这个问题在这里已经有答案了 我编写了一个使用多线程的 Python 函数 def image link ID tid1 Thread target displayImage args link ID tid2 Thread target p
  • TypeScript 中静态方法的抽象方法版本

    我正在使用打字稿创建数据模型范例 我将不同类型的数据存储在不同的地方 SQL 本地缓存 我想创建一个抽象类 其中包含任何类型的数据存储所需的所有方法 创建 查找 更新 计数 销毁 这样我就可以扩展该类并针对不同类型的存储以不同的方式实现它
  • 加载了错误的 App.config

    我构建了一个 NET 3 5 类库 它读取 App config 文件以获取所需的值 当我在 Visual Studio 中测试它时 它可以很好地提取配置值 为了测试它 我只需将项目更改为控制台应用程序并执行方法调用 我需要从许多其他 NE
  • 从密钥库加载证书

    从受密码保护的密钥库加载证书和密钥 然后将其用于证书验证和数字签名 阅读证书真的很简单 CertificateFactory factory CertificateFactory getInstance X 509 X509Certific
  • php计算浮点数

    我这里有一个奇怪的数学计算 我希望有人能解释一下 a 1 85 100 b 1 5 100 c 1 1 100 d 0 4 100 e 0 4 100 f 0 4 100 g 0 4 100 h a b c d e f g echo h 1
  • 在opencv中读取像素的HSV值

    你会如何读取 HSV 格式而不是 RGB 格式的像素值 下面的代码以 RGB 格式读取圆心的像素值 HSV 的读数值有很大差异吗 int main int argc char argv load image from directory I