在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

在核桃派上實現USB攝像頭的OpenCV顏色檢測

全志在線 ? 來源:walnutpi ? 2024-01-20 17:50 ? 次閱讀

在前幾周的文章中已經介紹過如何在核桃派上用OpenCV讀取圖像并顯示到pyqt5的窗口上,這里在上一篇文章的基礎上,給開發板加入顏色檢測功能,嘗試將圖像中所有藍色的東西都用一個框標記出來。

顏色檢測核心api

按照慣例,先要介紹一下opencv中常用的hsv像素格式。顏色還是那個顏色,只是描述顏色用的參數變了。h代表色調,s代表飽和度,v代表明度,比使用rgb格式更方便計算與思考。

29ce6f4c-b768-11ee-8b88-92fbcf53809c.png

opencv中也提供了將rgb bgr等轉為hsv圖片的api:

hsvImage = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

cv2.inRange,給定一個要檢測的hsv顏色范圍,返回一張黑白圖。將hsv值在該范圍內的像素點全部變為白色,不在的則為黑色。

import numpy as np
hsv_upper=np.array([125, 250, 250])
hsv_lower=np.array([95, 40, 40])
grayImage = cv2.inRange(hsvImage, hsv_lower, hsv_upper) # 顏色二值化

findContours,傳入黑白圖像,尋找所有輪廓。返回兩個列表,contours里是找到的所有輪廓,hierarchy是那些輪廓之間的相對位置關系

contours, hierarchy = cv2.findContours(grayImage, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

minAreaRect,傳入一個輪廓,計算最小外接矩形

# 畫最小外接矩形
for cts in contours :
  rect = cv2.minAreaRect(cts)

drawContours, 繪制輪廓

box = np.int0(cv2.boxPoints(rect)) 
  cv2.drawContours(rgbImage, [box], 0, (255, 0, 0), 2)

基本測試代碼

import cv2
from ui_main import Ui_MainWindow
import numpy as np


import PyQt5
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *


# 修正qt的plugin路徑,因為某些程序(cv2)會將其改到其他路徑
import os
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = os.path.dirname(PyQt5.__file__)




#【可選代碼】允許Thonny遠程運行
import os
os.environ["DISPLAY"] = ":0.0"


#【建議代碼】允許終端通過ctrl+c中斷窗口,方便調試
import signal
signal.signal(signal.SIGINT, signal.SIG_DFL)
timer = QTimer()
timer.start(100) # You may change this if you wish.
timer.timeout.connect(lambda: None) # Let the interpreter run each 100 ms


# 線程類
class Work(QThread):
  signal_update_label = pyqtSignal(QPixmap)
  label:QLabel
  def sloat_update_label( self, pixmap
    self.label.setPixmap(pixmap)


  def run(self):
    print("label.width()=", self.label.width())
    print("label.height()=", self.label.height())
    self.signal_update_label.connect(self.sloat_update_label)
    cap = cv2.VideoCapture(1)
    while True:
      ret, frame = cap.read()
      if ret:


        # 顏色轉換
        rgbImage = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        hsvImage = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
        
        # 二值化
        hsv_upper=np.array([125, 250, 250])
        hsv_lower=np.array([95, 40, 40])
        grayImage = cv2.inRange(hsvImage, hsv_lower, hsv_upper) # 顏色二值化


        # 查找并繪制最小外接矩形
        contours, hierarchy = cv2.findContours(grayImage, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
        for cts in contours :
          rect = cv2.minAreaRect(cts) 
          box = np.int0(cv2.boxPoints(rect)) 
          cv2.drawContours(rgbImage, [box], 0, (255, 0, 0), 2)

由于攝像頭拍出來的噪點很多,而物體由于本身材質反光導致拍出來也有一些部分的顏色變了。所以實際應用時需要對圖像進行一些濾波模糊化處理。或是直接對生成后的黑白圖像進行一定膨脹與收縮。

29f0acec-b768-11ee-8b88-92fbcf53809c.png

再把各個參數做成pyqt窗口的選項,查看各項搭配后的效果,快速找到合適的參數選擇。

# 圖像縮小并轉換顏色格式
frame = cv2.resize(frame, (320, 240))
rgbImage = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
h, w, ch = rgbImage.shape


# 圖像模糊
if self.blur.flag :
 rgbImage = cv2.blur(rgbImage,(self.blur.num, self.blur.num))
if self.median.flag :
 rgbImage = cv2.medianBlur(rgbImage,self.median.num)
if self.gaussian.flag :
 rgbImage = cv2.GaussianBlur(rgbImage, (self.gaussian.num, self.gaussian.num), 0)


# 二值化
hsvImage = cv2.cvtColor(rgbImage, cv2.COLOR_RGB2HSV)
grayImage = cv2.inRange(hsvImage, np.array([self.hl.num, self.sl.num, self.vl.num]), np.array([self.hu.num, self.su.num, self.vu.num])) # 顏色二值化
        
# 圖像操作
if self.dilate.flag :
 grayImage = cv2.dilate(grayImage, np.ones((self.dilate.num, self.dilate.num), dtype=np.uint8), 1) # 膨脹
if self.erode.flag :
 grayImage = cv2.erode(grayImage, np.ones((self.erode.num, self.erode.num), dtype=np.uint8), 1) # 腐蝕


# 獲取中心點的顏色,畫上十字光標
height, width = rgbImage.shape[:2]
center_y, center_x = height // 2, width // 2
color = tuple(map(int, rgbImage[center_y, center_x, :]))
cv2.line(rgbImage, (center_x, 0), (center_x, height-1), color, 3)
cv2.line(rgbImage, (0, center_y), (width-1, center_y), color, 3)


contours, hierarchy = cv2.findContours(grayImage, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • usb
    usb
    +關注

    關注

    60

    文章

    8053

    瀏覽量

    269080
  • 攝像頭
    +關注

    關注

    60

    文章

    4913

    瀏覽量

    97289
  • OpenCV
    +關注

    關注

    31

    文章

    641

    瀏覽量

    42179

原文標題:在核桃派上實現USB攝像頭的OpenCV顏色檢測

文章出處:【微信號:gh_79acfa3aa3e3,微信公眾號:全志在線】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    樹莓派上使用OpenCV和Python實現實時人臉檢測

    理論知識,因此初學者也能輕松跟著步驟實現。 項目所需設備 硬件: 樹莓派 3 Model B; 樹莓派攝像頭模塊(PiCam)。 語言和庫: OpenCV Python 3 步驟 本文主要講述如何使用 PiCam
    的頭像 發表于 03-06 09:00 ?5.1w次閱讀

    全志H616核桃派上實現USB攝像頭OpenCV顏色檢測

    在給核桃派開發板用OpenCV讀取圖像并顯示到pyqt5的窗口上并加入顏色檢測功能,嘗試將圖像中所有藍色的東西都用一個框標記出來。顏色
    發表于 01-22 10:10

    使用esp-iot-solution master分支的usb_stream攝像頭顏色不對是怎么回事?

    使用esp-iot-solution master分支的usb_stream 連接usb攝像頭顏色偏紅。這個攝像頭
    發表于 06-27 06:41

    使用OpenCV保存從攝像頭捕獲的視頻時更改顏色輸出視頻收到警告怎么解決?

    保存了從配備 OpenCV* 的攝像頭捕獲的視頻。 生成更改的顏色輸出視頻。 收到警告:[ INFO:0] global .。/opencv/modules/core/src/uti
    發表于 03-05 07:20

    OpenWRT + OpenCV 無線攝像頭監控和圖像處理

    誕生了。【步驟:路由】路由器上的原材料:703n固件mjpeg-streamer軟件免驅攝像頭(筆者使用的是某寶上淘來的東芝筆記本拆機攝像頭)首先要實現圖像傳輸需要在路由上掛載USB
    發表于 02-09 22:15

    【OK210試用體驗】之(五)——Ubuntu12.04安裝OpenCV2.4.9并實現USB攝像頭C270圖像采集

    邁進。今天帖子的主要內容就是Ubuntu12.04上安裝圖像處理軟件OpenCV,并用簡單的程序實現UVC攝像頭C270的圖像采集。 硬件平臺:Windows7 64 bit +
    發表于 08-02 12:21

    NanoPi 2接USB攝像頭使用OpenCV

    `NanoPi 2接USB攝像頭使用OpenCVOpenCV的全稱是Open Source Computer Vision Library,是一個跨平臺的計算機視覺庫。NanoPi 2跑Debian
    發表于 12-24 18:34

    Nanopi M3 u***攝像頭使用opencv

    首先先準備好器材1.M3板子2.燒寫好debian系統的sd卡3.lcd屏 (我用的是x710的電容屏,7寸的)4.USB(FA-CAM202)200萬攝像頭模塊啟動系統后:OpenCV的全稱
    發表于 10-11 15:42

    【大聯大友尚安森美半導體感光芯片USB雙目攝像頭模組試用體驗】開箱報告

    ` 經過申請,收到了雙目攝像頭,這次主要是通過雙目攝像頭搭載linux操作系統,基于Qt+Opencv庫進行圖形算法的識別。本次很榮幸可以參加這次的試用體驗活動。好了,下面就開始對USB
    發表于 09-02 09:52

    【大聯大友尚安森美半導體感光芯片USB雙目攝像頭模組試用體驗】使用opencv打開攝像頭

    因為我們使用的是Qt+opencv 進行攝像頭項目環境的搭建去對雙目攝像頭進行測試。目前我用的是Qt5, opencv 使用的是oepcv3.4
    發表于 09-26 21:54

    【大聯大友尚安森美半導體感光芯片USB雙目攝像頭模組測試三】--寵物機器人攝像頭人臉采集和識別

    鏡頭,2是右側鏡頭,之后會優化本項目代碼,將兩個攝像頭共同調用協同處理采集的畫面,這里主要以實現調用和人臉檢測為目的。暫不累述。2人臉識別及背光調節這里主要是面對項目寵物小車多光源環
    發表于 10-20 00:16

    STM32單片機如何實現連接USB攝像頭

    STM32單片機實現連接USB攝像頭如題,本人已經實現STM32連接基于Cypress CY7C68013A的攝像頭電路板的方案,具體
    發表于 07-19 06:20

    如何去實現一種基于opencv與flask的攝像頭圖像傳輸呢

    硬件:eaidk610(fedaro28)、普通帶usb接口攝像頭軟件環境: python3.9、opencv4.6、Flask2.2主要實現了從板子的連接的
    發表于 10-18 14:25

    STM32單片機實現連接USB攝像頭

    STM32單片機實現連接USB攝像頭如題,本人已經實現STM32連接基于Cypress CY7C68013A的攝像頭電路板的方案,具體
    發表于 11-18 20:51 ?148次下載
    STM32單片機<b class='flag-5'>實現</b>連接<b class='flag-5'>USB</b><b class='flag-5'>攝像頭</b>

    Linux下QT+OpenCV實現人臉實時檢測(攝像頭)

    程序功能: 子線程里打開攝像頭,獲取攝像頭的數據,通過信號與槽的方式,將攝像頭數據傳遞給主UI界面實時顯示,采用定時器每100ms取一次
    的頭像 發表于 08-14 09:29 ?2483次閱讀
    Linux下QT+<b class='flag-5'>OpenCV</b><b class='flag-5'>實現</b>人臉實時<b class='flag-5'>檢測</b>(<b class='flag-5'>攝像頭</b>)
    主站蜘蛛池模板: 欧美色碰碰碰免费观看长视频 | 一级做a爱片特黄在线观看免费看 | 一区二区三区四区视频 | 成年女人毛片 | 欧美一级做一级做片性十三 | 午夜肉伦伦影院在线观看 | 无遮挡很爽很污很黄在线网站 | 视频在线欧美 | 亚洲高清一区二区三区四区 | 97天天摸天天碰天天爽 | 国产亚洲3p一区二区三区 | 国产成人无精品久久久久国语 | 国产成人综合亚洲怡春院 | 精品免费久久久久久成人影院 | 中文字幕av一区二区三区 | 一区二区在线免费观看 | 爱爱免费视频网站 | 六月激情丁香 | 亚洲精品午夜视频 | 99久久综合给久久精品 | 午夜想想爱午夜剧场 | 久久精品草 | 男生脱美女内裤内衣动态图 | 日本与大黑人xxxx | 精品久久天干天天天按摩 | 天天干天天谢 | 亚洲1区2区3区4区 | 毛片一区二区三区 | 国产性夜夜性夜夜爽91 | 精品成人网 | 可以免费看黄的网址 | 久久狠狠色噜噜狠狠狠狠97 | 欧美性极品hd高清视频 | 国产色婷婷精品综合在线 | 国产精品14p | 亚洲高清毛片 | freee性欧美| 亚洲综合色在线观看 | 久久免费视频2 | 男人视频在线观看 | 天天躁狠狠躁夜夜躁2021 |