亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在python中檢測圖像中的彩色點?

在python中檢測圖像中的彩色點?

MMMHUHU 2022-11-09 14:49:52
我正在嘗試檢測白色/灰色背景上的彩色點。這些點是 3 種不同顏色(黃色、紫色、藍色)的不同大小。這是原始圖像:我將圖像轉換為 HSV 并找到每個圖像的下限和上限,然后應用輪廓檢測來找到這些點。以下代碼檢測到大部分點:import cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread('image1_1.png')hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)lower_yellow = np.array([22,25,219])upper_yellow = np.array([25,75,225])lower_purple = np.array([141,31,223])upper_purple = np.array([143,83,225])lower_blue = np.array([92,32,202])upper_blue = np.array([96,36,208])mask_blue = cv2.inRange(hsv, lower_blue, upper_blue)mask_purple = cv2.inRange(hsv, lower_purple, upper_purple)mask_yellow = cv2.inRange(hsv, lower_yellow, upper_yellow)res_blue = cv2.bitwise_and(img,img, mask=mask_blue)res_purple = cv2.bitwise_and(img,img, mask=mask_purple)res_yellow = cv2.bitwise_and(img,img, mask=mask_yellow)gray_blue = cv2.cvtColor(res_blue, cv2.COLOR_BGR2GRAY)gray_purple = cv2.cvtColor(res_purple, cv2.COLOR_BGR2GRAY)gray_yellow = cv2.cvtColor(res_yellow, cv2.COLOR_BGR2GRAY)_,thresh_blue = cv2.threshold(gray_blue,10,255,cv2.THRESH_BINARY)_,thresh_purple = cv2.threshold(gray_purple,10,255,cv2.THRESH_BINARY)_,thresh_yellow = cv2.threshold(gray_yellow,10,255,cv2.THRESH_BINARY)contours_blue, hierarhy1 = cv2.findContours(thresh_blue,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)contours_purple, hierarhy2 = cv2.findContours(thresh_purple,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)contours_yellow, hierarhy3 = cv2.findContours(thresh_yellow,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)result = img.copy()cv2.drawContours(result, contours_blue, -1, (0, 0, 255), 2)cv2.drawContours(result, contours_purple, -1, (0, 0, 255), 2)cv2.drawContours(result, contours_yellow, -1, (0, 0, 255), 2)cv2.imwrite("_allContours.jpg", result)以下是檢測到的輪廓:問題是沒有檢測到一些彩色點。我理解通過微調顏色范圍(上下)可以檢測到更多的點。但這非常耗時,并且不能推廣到類似的圖像。例如,下面的圖像看起來與上面的第一張圖像相似,并且具有相同的彩色點,但背景略有不同,一旦我通過上面的代碼運行它,它甚至無法檢測到一個點。我在正確的軌道上嗎?是否有更可擴展和更可靠的解決方案,無需調整顏色參數即可解決此問題?這是我嘗試的另一張圖片:
查看完整描述

1 回答

?
精慕HU

TA貢獻1845條經驗 獲得超8個贊

我建議在 Python/OpenCV 中簡單地使用 AdaptiveThreshold


import cv2

import numpy as np


# read image

img = cv2.imread("dots.png")


# convert img to grayscale

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)


# do adaptive threshold on gray image

thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 25, 6)


# write results to disk

cv2.imwrite("dots_thresh.jpg", thresh)


# display it

cv2.imshow("thresh", thresh)

cv2.waitKey(0)

http://img1.sycdn.imooc.com//636b4dc500010a1204380568.jpg

查看完整回答
反對 回復 2022-11-09
  • 1 回答
  • 0 關注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號