6

現在、円の外側をすべて黒くしようとしています。次のコード行を使用して円を描いています。

cv::Point center(cvRound(circles[i][0]), cvRound(circles[i][1])); // CVRound converts floating numbers to integer
int radius = cvRound(circles[i][2]);                              // Radius is the third parameter [i][0] = x [i][1]= y [i][2] = radius
circle( image, center, 3, cv::Scalar(0,255,0), -1, 8, 0 );        // Drawing little circle to Image Center , next Line of Code draws the real circle
circle( image, center, radius, cv::Scalar(0,0,255), 3, 8, 0 );    // Circle(img, center, radius, color, thickness=1, lineType=8, shift=0)

半径と円の中心がある場合、すべてを黒く塗りつぶす最善の方法は何ですか? OpenCV はこれを行うための簡単なメカニズムを提供しますか、それとも画像のすべてのピクセルを反復処理し、位置に応じて黒くするかどうかを決定する必要がありますか?

4

4 に答える 4

7

ヒントをくれたAbidのおかげで、私はこのアプローチに行き着きました。すべて正常に動作します:

cv::Mat src = someMethodThatReturnsSrcImage(); // src Image 
cv::Mat maskedImage; // stores masked Image
std::vector<cv::Vec3f> circles = someMethodThatReturnsCircles(src);    
cv::Mat mask(srcImageForDimensions.size(),srcImageForDimensions.type());  // create an Mat that has same Dimensons as src
mask.setTo(cv::Scalar(0,0,0));                                            // creates black-Image
    // Add all found circles to mask
for( size_t i = 0; i < circles.size(); i++ )                          // iterate through all detected Circles
       {
         cv::Point center(cvRound(circles[i][0]), cvRound(circles[i][1])); // CVRound converts floating numbers to integer
         int radius = cvRound(circles[i][2]);                              // Radius is the third parameter [i][0] = x [i][1]= y [i][2] = radius
         cv::circle( mask, center, radius, cv::Scalar(255,255,255),-1, 8, 0 );    // Circle(img, center, radius, color, thickness=1, lineType=8, shift=0)
       }

src.copyTo(maskedImage,mask); // creates masked Image and copies it to maskedImage
于 2013-08-27T09:31:29.260 に答える
3

背景を好きな色にすることができます

image=cv::Scalar(red_value, green_value, blue_value);

次に、円を描きます

于 2013-08-27T09:07:16.660 に答える