色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ROS2 HSV值獲取

新機(jī)器視覺(jué) ? 來(lái)源:古月居 ? 2024-01-30 16:13 ? 次閱讀

計(jì)算機(jī)視覺(jué)中,顏色提取是一種常用的圖像處理技術(shù),其中HSV(色相、飽和度、明度)是一種常見(jiàn)的顏色空間,用于描述和提取圖像中的顏色信息

HSV顏色空間將顏色表示為三個(gè)分量:色相(H)、飽和度(S)和明度(V)。

?色相(Hue):色相是顏色的類型或類別,描述了顏色在光譜中的位置。在HSV模型中,色相表示為一個(gè)角度值,通常在0到360度之間,將整個(gè)顏色光譜分為不同的顏色區(qū)域,如紅、橙、黃、綠、藍(lán)、紫等。

?飽和度(Saturation):飽和度表示顏色的純度或強(qiáng)度,即顏色的深淺程度。飽和度為0時(shí),顏色變?yōu)榛译A;飽和度為最大值時(shí),顏色呈現(xiàn)出最鮮艷的狀態(tài)。飽和度的取值范圍通常在0到1之間,也可以表示為0%到100%。

?明度(Value):明度表示顏色的明亮度,即顏色的亮度和深度。明度為0時(shí),顏色為黑色;明度為最大值時(shí),顏色為白色。明度的取值范圍通常在0到1之間,也可以表示為0%到100%。

通過(guò)這三個(gè)參數(shù)的組合,可以在HSV模型中精確地描述各種顏色,使得調(diào)整和理解顏色更加直觀和容易。在圖像處理中,HSV模型常用于調(diào)整圖像的顏色平衡、色調(diào)和亮度等方面。

硬件環(huán)境

操作環(huán)境及軟硬件配置如下:

?OriginEye 智能相機(jī)

?PC:Ubuntu (≥20.04) + ROS2 (≥Foxy)

代碼

 import cv2
  import numpy as np
  import rclpy
  from rclpy.node import Node
  from sensor_msgs.msg import Image
  from cv_bridge import CvBridge
  from collections import deque
  import textwrap


  class GetHsv(Node):
    def __init__(self):
      super().__init__('get_hsv')
      self.get_logger().info("Start get HSV")
      self.bridge = CvBridge()
      self.image_sub = self.create_subscription(Image, '/image_raw', self.image_callback, 10)
      self.pub = self.create_publisher(Image, '/camera/process_image', 10)
      self.count = 0
      self.box_width = 60
      self.collect_times = 300
      self.HSV_value = deque(maxlen=self.collect_times)
      self.H_range, self.S_range, self.V_range = 10, 80, 80
      self.lower_HSV = None
      self.upper_HSV = None


    def image_callback(self, msg):
      image = self.bridge.imgmsg_to_cv2(msg, 'bgr8')


      if self.count < self.collect_times:
        self.draw_rectangle(image)
      elif self.count < self.collect_times + self.collect_times:
        self.collect_hsv_value(image)
      else:
        self.save_hsv_value(image)


      self.count += 1
      self.pub.publish(self.bridge.cv2_to_imgmsg(image, 'bgr8'))


    def draw_rectangle(self, image):
      text = 'please put the color being tested in the rectangle box!'
      self.add_text(image, text)
      rect_x = (image.shape[1] - self.box_width) // 2
      rect_y = (image.shape[0] - self.box_width) // 2
      cv2.rectangle(image, (rect_x, rect_y), (
          rect_x + self.box_width, rect_y + self.box_width), (0, 255, 0), 3)


    def collect_hsv_value(self, image):
      text = 'HSV_value is collecting!'
      self.add_text(image, text)
      frame_x = (image.shape[1] - self.box_width) // 2
      frame_y = (image.shape[0] - self.box_width) // 2
      frame = image[frame_y:frame_y + self.box_width, frame_x:frame_x + self.box_width]
      self.HSV_value.append(self.calculate_mean_hsv(frame))


    def save_hsv_value(self, image):
      text = 'HSV_value is collected!'
      self.add_text(image,text)
      mean_HSV = np.mean(self.HSV_value, axis=0)
      self.lower_HSV, self.upper_HSV = self.calculate_hsv_range(mean_HSV)
      self.write_hsv_to_file(self.lower_HSV, self.upper_HSV)


    def calculate_mean_hsv(self, img):
      hsv_image = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
      return np.mean(hsv_image, axis=(0, 1))


    def calculate_hsv_range(self, HSV_value):
      lower_H = np.clip(int(HSV_value[0] - self.H_range), 0, 180)
      upper_H = np.clip(int(HSV_value[0] + self.H_range), 0, 180)
      lower_S = np.clip(int(HSV_value[1] - self.S_range), 40, 255)
      upper_S = np.clip(int(HSV_value[1] + self.S_range), 40, 255)
      lower_V = np.clip(int(HSV_value[2] - self.V_range), 40, 255)
      upper_V = np.clip(int(HSV_value[2] + self.V_range), 40, 255)
      return np.array([lower_H, lower_S, lower_V]), np.array([upper_H, upper_S, upper_V])


    def write_hsv_to_file(self, lower_HSV, upper_HSV):
      content = f"block_HSV is : {lower_HSV[0]},
        {lower_HSV[1]},{lower_HSV[2]} {upper_HSV[0]},{upper_HSV[1]},{upper_HSV[2]}
"
      filename = "/userdata/dev_ws/color_block_HSV.txt"
      with open(filename, "w+") as f:
        f.write(content)


      self.get_logger().info(f"HSV value has been saved in {filename}")
      self.get_logger().info(content)


    def add_text(self, image, text):
      text = textwrap.wrap(text, width = 80)
      text_y = image.shape[0] // 2 - 30
      for line in text:
        text_size, _ = cv2.getTextSize(line, cv2.FONT_HERSHEY_SIMPLEX, 1.2, 2)
        text_x = (image.shape[1] - text_size[0]) // 2
        cv2.putText(image, line, (text_x, text_y), 
          cv2.FONT_HERSHEY_SIMPLEX, 1.2, (0, 255, 0), 2, cv2.LINE_AA)


  def main(args=None):
    rclpy.init(args=args)
    get_hsv = GetHsv()
    rclpy.spin(get_hsv)
    get_hsv.destroy_node()
    rclpy.shutdown()


  if __name__ == '__main__':
    main()

簡(jiǎn)要說(shuō)明

這段代碼的作用是通過(guò)將相機(jī)對(duì)準(zhǔn)你希望捕捉的圖像HSV值,進(jìn)行一輪采集后便會(huì)將采集的HSV值存放在指定路徑了。

1、為什么要做HSV值獲取,HSV色彩空間相對(duì)于rgb色域有什么有特殊點(diǎn)嗎?

簡(jiǎn)單來(lái)說(shuō),HSV色彩空間相對(duì)于RGB色域更符合人類對(duì)顏色的感知方式,更方便地進(jìn)行顏色處理和分析,并且提供了更直觀和靈活的顏色定義和比較方式。舉個(gè)例子,人描述一個(gè)顏色通常不會(huì)直接說(shuō)它的rgb值,而是描述淡綠色,艷紅色等,而這正是HSV色彩空間描述的方式。

2、應(yīng)用HSV時(shí)為什么通常使用upper、lower兩組數(shù)據(jù)?

使用兩組閾值的好處是可以更準(zhǔn)確地定義要提取的顏色范圍,同時(shí)考慮到色調(diào)環(huán)的邊界情況。這樣可以避免顏色提取結(jié)果受到色調(diào)環(huán)邊界的影響,提高顏色提取的準(zhǔn)確性和穩(wěn)定性。

3、是否可以將圖像直接使用opencv做處理?

還需要解耦圖像信息,例如ROS的圖像需要使用CVBridge處理成Opencv能處理的圖片,又比如在處理NV12時(shí),需要將Hbmem轉(zhuǎn)成常規(guī)opencv識(shí)別的nv12格式。但無(wú)一例外我們可以稱之為解耦了。

4、 HSV如何和RGB進(jìn)行轉(zhuǎn)換呢?

首先,將HSV中的色相、飽和度和明度分別歸一化到區(qū)間[0, 1]。

歸一化的色相(H’):H' = H / 360

歸一化的飽和度(S’):S' = S / 100

歸一化的明度(V’):V' = V / 100

接下來(lái),使用以下公式計(jì)算RGB值:

如果飽和度為0,則RGB值為灰度色:

R = G = B = V'

如果飽和度不為0,則使用以下公式:

C = V' * S'
X = C * (1 - |(H' mod 2) - 1|
m = V' - C

然后,根據(jù)色相的不同情況,計(jì)算最終的RGB值:

當(dāng)0 <= H' < 1/6 時(shí):(R', G', B') = (C, X, 0)

當(dāng) 1/6 <= H' < 2/6 時(shí):(R', G', B') = (X, C, 0)

當(dāng) 2/6 <= H' < 3/6 時(shí):(R', G', B') = (0, C, X)

當(dāng) 3/6 <= H' < 4/6 時(shí):(R', G', B') = (0, X, C)

當(dāng) 4/6 <= H' < 5/6 時(shí):(R', G', B') = (X, 0, C)

當(dāng) 5/6 <= H' <= 1 時(shí):(R', G', B') = (C, 0, X)

最后,將得到的RGB值映射到區(qū)間[0, 255]。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 圖像處理
    +關(guān)注

    關(guān)注

    27

    文章

    1289

    瀏覽量

    56724
  • 計(jì)算機(jī)視覺(jué)

    關(guān)注

    8

    文章

    1698

    瀏覽量

    45982
  • HSV
    HSV
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    2603

原文標(biāo)題:ROS2 HSV值獲取

文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺(jué)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Micro-ROS:把ROS2放在MCU上

    機(jī)器人的發(fā)展。 ? ROS便是為機(jī)器人在研發(fā)的過(guò)程中的代碼復(fù)用提供支持的開(kāi)源框架,大量的機(jī)器人開(kāi)源項(xiàng)目,從感知到控制、從定位到構(gòu)圖、從導(dǎo)航到可視化,幾乎都使用ROS作為基礎(chǔ)。 ? Micro-ROS從何而來(lái)? ? Micro-
    的頭像 發(fā)表于 04-07 07:13 ?7719次閱讀

    系統(tǒng)鏡像Ubuntu_ROS2ROS2是什么意思,帶有ROS2開(kāi)發(fā)環(huán)境嗎?

    請(qǐng)問(wèn)一下,百度文庫(kù)資料里面,下圖所示的系統(tǒng)鏡像Ubuntu_ROS2ROS2是什么意思,帶有ROS2開(kāi)發(fā)環(huán)境嗎?與前面4GB版本的鏡像有什么區(qū)別?
    發(fā)表于 03-01 23:06

    ROS2的安裝與使用 精選資料推薦

    ros2的烏龜仿真turtlesim,介紹topic,service,action等元素及其使用,介紹ros的基本操作
    發(fā)表于 08-30 08:24

    如何在ROS2中運(yùn)行小烏龜呢

    ROS2中運(yùn)行小烏龜,其實(shí)主要就是安裝兩個(gè)工具,turtlesim和rqt。A: 安裝turtlesim。輸入【sudo apt update】輸入【sudo apt install
    發(fā)表于 11-05 06:08

    基于無(wú)線wifi網(wǎng)絡(luò)的X3派和PC虛擬機(jī)通過(guò)ROS2實(shí)現(xiàn)跨設(shè)備通信

    1、X3派和PC虛擬機(jī)都連接無(wú)線wifi網(wǎng)絡(luò)的情況下通過(guò)ROS2實(shí)現(xiàn)跨設(shè)備通信多機(jī)通信是ROS的基礎(chǔ)能力之一,相比于ROS1,ROS2通過(guò)非常簡(jiǎn)單的配置即可實(shí)現(xiàn)多機(jī)通信。對(duì)于兩個(gè)安裝了
    發(fā)表于 07-13 15:13

    教你一步步創(chuàng)建自己的ROS2工作空間應(yīng)用

    ,IP地址替換為自己的實(shí)際IP地址。ssh root@192.168.31.1922、在X3派中執(zhí)行下面的命令腳本進(jìn)行系統(tǒng)的更新以及ROS2編譯環(huán)境依賴安裝apt -y update &
    發(fā)表于 11-24 15:00

    【昉·星光 2 高性能RISC-V單板計(jì)算機(jī)體驗(yàn)】五:在 VisionFive2 上體驗(yàn) ROS2 humble

    在 VisionFive2 上體驗(yàn) ROS2 humble 一、系統(tǒng)準(zhǔn)備 參考 在 VisionFive2 上安裝 ROS2 humble 安裝并配置
    發(fā)表于 09-04 04:59

    Linux嵌入式開(kāi)發(fā)筆記(六)在ROS2中運(yùn)行小烏龜實(shí)例

    ROS2中運(yùn)行小烏龜,其實(shí)主要就是安裝兩個(gè)工具,turtlesim和rqt。A: 安裝turtlesim。輸入【sudo apt update】輸入【sudo apt install
    發(fā)表于 11-02 15:21 ?10次下載
    Linux嵌入式開(kāi)發(fā)筆記(六)在<b class='flag-5'>ROS2</b>中運(yùn)行小烏龜實(shí)例

    Window10怎么安裝ROS2

    Window10怎么安裝ROS2,以下的操作都要管理員的權(quán)限,我可以提前劇透,我應(yīng)該應(yīng)該是沒(méi)有安裝上DDS,應(yīng)該是算安裝好了80%的樣子。
    的頭像 發(fā)表于 02-22 10:12 ?919次閱讀
    Window10怎么安裝<b class='flag-5'>ROS2</b>

    了解ROS2是什么

    ROS2是從底層構(gòu)建時(shí)便考慮使其適用于商業(yè)用途,它是機(jī)器人操作系統(tǒng)現(xiàn)有框架的重構(gòu),經(jīng)過(guò)優(yōu)化以適用于工業(yè)應(yīng)用,開(kāi)發(fā)可在新的應(yīng)用中進(jìn)行擴(kuò)展,如移動(dòng)機(jī)器人、無(wú)人機(jī)群和自動(dòng)駕駛汽車。
    的頭像 發(fā)表于 02-28 13:38 ?2.1w次閱讀

    X3派和PC虛擬機(jī)之間基于ROS2和wifi的通信

    X3派、PC虛擬機(jī)連接無(wú)線wifi網(wǎng)絡(luò)下,通過(guò)ROS2實(shí)現(xiàn)跨設(shè)備通信……
    的頭像 發(fā)表于 07-13 15:03 ?987次閱讀
    X3派和PC虛擬機(jī)之間基于<b class='flag-5'>ROS2</b>和wifi的通信

    DDS在ROS2中的應(yīng)用

    DDS在ROS2中的應(yīng)用 DDS在ROS2系統(tǒng)中的位置至關(guān)重要,所有上層建設(shè)都建立在DDS之上。在這個(gè)ROS2的架構(gòu)圖中,藍(lán)色和紅色部分就是DDS。 剛才我們也提到,DDS是一種通信的標(biāo)準(zhǔn),就像4G
    的頭像 發(fā)表于 11-24 17:54 ?921次閱讀
    DDS在<b class='flag-5'>ROS2</b>中的應(yīng)用

    ros1和ros2的通信模型

    數(shù)據(jù) ROS2: 參與者(DomainParticipant):一個(gè)參與者Participant就是一個(gè)容器,對(duì)應(yīng)于一個(gè)使用DDS的用戶,任何DDS的用戶都必須通過(guò)Participant來(lái)訪問(wèn)全局
    的頭像 發(fā)表于 11-27 11:26 ?789次閱讀
    <b class='flag-5'>ros</b>1和<b class='flag-5'>ros2</b>的通信模型

    ROS2中自帶例程測(cè)試

    如果你是一個(gè)ROS2的開(kāi)發(fā)者,可能對(duì)剛才我們使用的ROS2命令比較熟悉,這時(shí)你可能也會(huì)產(chǎn)生一個(gè)問(wèn)題:我們之前也安裝了ROS2系統(tǒng),那ROS2的原生功能還可以正常運(yùn)行么? 我們?cè)賮?lái)試一試
    的頭像 發(fā)表于 11-28 16:29 ?959次閱讀
    <b class='flag-5'>ROS2</b>中自帶例程測(cè)試

    在TogetherROS中如何安裝ROS2功能包

    安裝ROS2功能包 接下來(lái),還有一個(gè)很重要的配置,那就是安裝ROS2功能包,我們說(shuō)TogetherROS是基于ROS2深度優(yōu)化的,很多模塊還是會(huì)復(fù)用ROS2中的功能,所有
    的頭像 發(fā)表于 12-01 16:02 ?987次閱讀
    在TogetherROS中如何安裝<b class='flag-5'>ROS2</b>功能包
    主站蜘蛛池模板: 久久久久国产精品美女毛片| 一个人在线观看免费视频| 古月娜下面好紧好爽| 日本邪恶少女漫画大全 | 国产乱码精品AAAAAAAA| 帅哥操美女| 国产精品久久自在自2021| 午夜天堂一区人妻| 国产欧美精品一区二区三区-老狼| 午夜噜噜噜私人影院在线播放 | 色噜噜噜视频| 国产 亚洲 另类 欧美 在线| 网红刘婷hd国产高清| 国产系列视频二区| 亚洲中文无码亚洲人在线观看-| 黄色网址在线播放| 欲香欲色天天影视大全| 老师的玉足高跟鞋满足我| 97色伦97色伦国产| 秋霞特色大片18岁入口| 国产传媒在线观看| 亚洲精品国偷拍自产在线| 精品无码三级在线观看视频| 中文人妻熟妇精品乱又伧| 欧美大片免费观看| 丰满少妇发泄14p| 亚洲XXX午休国产熟女屁| 九九99亚洲精品久久久久| 最新男同鸭子ktv| 欧美性受xxxx狂喷水| 国产www视频| 亚洲人交性视频| 美女全光末满18勿进| 成人国产精品日本在线| 校草让我脱了内裤给全班看| 久久福利影院| 99热这里有精品| 天天影视香色欲综合网| 花蝴蝶在线直播观看| 99re久久热在线播放8| 色橹|