pythonを用いたopenCVについて質問です。
行いたいこと
ハフ変換により検出した球体の色を調べ、何色の玉か判定する。
玉には目的とする色(赤や青)の外に不要な色(白と黒)が混ざっているので、HSV変換を用いて不要な色を除いたものだけで判定したい。
中心から周囲(円形)の画素を調べることで色を判定できるのかが分からないです。それとも、もっと簡単な判別方法がありますでしょうか。
行ったこと
エッジ処理→ハフ変換→円の中心の座標を求める
python3
1 2# -*- coding: utf-8 -*- 3 4import cv2 5import numpy as np 6 7#入力画像の読み込み 8img = cv2.imread(r'画像へのパス') 9 10#Gray Scaleへ変換 11gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 12 13#Sobelフィルタでx方向のエッジ検出 14gray_sobelx = cv2.Sobel(gray,cv2.CV_32F,1,0) 15 16#x方向のエッジ検出結果表示 17#cv2.imshow('gray_sobelx',gray_sobelx) 18 19#Sobelフィルタでy方向のエッジ検出 20gray_sobely = cv2.Sobel(gray,cv2.CV_32F,0,1) 21 22#8ビット符号なし整数変換 23gray_abs_sobelx = cv2.convertScaleAbs(gray_sobelx) 24gray_abs_sobely = cv2.convertScaleAbs(gray_sobely) 25 26#重み付き和 27gray_sobel_edge = cv2.addWeighted(gray_abs_sobelx,0.5,gray_abs_sobely,0.5,0) 28 29 30 31img=gray_sobel_edge.copy() 32img = cv2.medianBlur(img,5) 33cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR) 34 35circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,40, 36 param1=149,param2=15,minRadius=8,maxRadius=11) 37 38 39circles = np.uint16(np.around(circles)) 40 41#結果用の画像 42result = cv2.imread(r'画像へのパス') 43 44#中心の描写 45for i in circles[0,:]: 46 cv2.circle(result,(i[0],i[1]),1,(0,0,255),3) 47 48 49#結果の表示 50cv2.imshow('detected circles',result) 51 52 53cv2.waitKey(0) 54cv2.destroyAllWindows() 55 56 57 58 59
> 玉には目的とする色(赤や青)の外に不要な色(白と黒)が混ざっている
これは,例えば「赤い玉」の表面全てが赤いわけではなく,白や黒で何かしらの模様が描かれている的な話ですか?
回答2件
あなたの回答
tips
プレビュー