3

Iphone を使用して、openCV で色付きの球体を検出しようとしています。最初のテスト ケースでは、指定されたコードで 1 つの黄色の大理石を使用していました。

cv::Mat thresholdHSV;
cv::Mat imgHSV;

cv::cvtColor(inputFrame, imgHSV, CV_BGR2HSV);

cv::inRange(imgHSV,cv::Scalar(20,100,100),cv::Scalar(30,255,255),thresholdHSV);

std::vector<std::vector<cv::Point> > contours;

findContours(thresholdHSV.clone(), contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);


//Draw them
cv::Mat destinationSource = cv::Mat::zeros(inputFrame.size(), inputFrame.type());
drawContours(destinationSource, contours, -1, cv::Scalar(255,255,255), CV_FILLED);

これにより、すでに良い結果が得られました。 ここに画像の説明を入力

ただし、どういうわけか円の形状を検出する必要があります。理想的には HoughCircle を適用したいのですが、OpenCv エラーが表示されます:「引数が正しくありません (ソース イメージは 8 ビット、シングル チャネルである必要があります)。

私も応募してみました

HoughCircles(thresholdHSV, detectedCircles, CV_HOUGH_GRADIENT, 1, thresholdHSV.rows / 8, 200, 100, 0, 0);

しかし、私はまったく結果を得ません。

destinationSource 画像に HoughCircle を適用する方法、または円形を検出する他の方法はありますか? (findContours は 1 つの輪郭のみを検出するため、互いに非常に近い同じ色の球が複数存在する場合も考慮する必要があります)

どんな助けでも大歓迎です、そしてあなたの時間をありがとう。

4

1 に答える 1

3

エラーは、入力画像は単一チャンネルの 8 ビット画像でなければならないことを示しているため、カラー画像は適用できません。

以下は、HoughCircles を使用した円検出の小さなコードです (ただし、Python では、理解できます)。

import cv2
import numpy as np
import sys

img = cv2.imread('img.jpg',0)
if img==None:
    print "cannot open ",filename

else:
    img = cv2.medianBlur(img,5)
    cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
    circles = cv2.HoughCircles(img,cv2.cv.CV_HOUGH_GRADIENT,1,10,param1=100,param2=30,minRadius=5,maxRadius=50)
    circles = np.uint16(np.around(circles))
    for i in circles[0,:]:
        cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),1) # draw the outer circle
        cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3) # draw the center of the circle

    cv2.imshow('detected circles',cimg)
    cv2.waitKey(0)
    cv2.imwrite('output.png',cimg)
    cv2.destroyAllWindows()

以下は出力です:

ここに画像の説明を入力

ここで C++ コードを見つけることができます: https://github.com/Itseez/opencv/blob/master/samples/cpp/houghcircles.cpp

于 2013-04-19T17:10:28.913 に答える