1
uchar** edge_detect(uchar ** gray_arr,uchar ** binary_arr,int height,int width)
{
int x;
//Store the quickmask as a 3X3 two-d array
short int quickmask[3][3]={{-1, 0, -1},{ 0, 4, 0},{-1, 0, -1} };
for(int i=1;i<(height-1);i++)
{
    for(int j=1;j<(width-1);j++)
    {  
        x=0;
        //Convolute the mask
        for(int a=-1;a<2;a++)
            for(int b=-1;b<2;b++)
                x = x + gray_arr[i+a][j+b]*quickmask[a+1][b+1];
        //Take care of the case wheen x<0 or x>255
        if(x<0) x = 0;
        if(x>255) x = 255;
        if(x<THRESHOLD) x = 0;
        if(x>THRESHOLD) x = 255;
        binary_arr[i][j]=x;
    }
}
return(binary_arr);
}

using namespace cv;


void main()
{
Mat src, src_gray;     

src = imread("lena.jpg");


  uchar * data;
  uchar * * binary_arr;
  uchar * * gray_arr;





   /// Convert it to gray   
  cvtColor( src, src_gray, CV_BGR2GRAY );
 std::cout << src.rows << " --- " << src.cols << std::endl;

Rect myROI(0, src_gray.rows-0.2*src_gray.rows, src.cols, 124);

Mat croppedImage = src_gray(myROI);


 /// Reduce the noise so we avoid false circle detection
  GaussianBlur( croppedImage, croppedImage, Size(9, 9), 2, 2 );

  vector<Vec3f> circles;

  /// Apply the Hough Transform to find the circles
  HoughCircles( croppedImage, circles, CV_HOUGH_GRADIENT, 3, 0.01, 200, 50, 0, 60 );

  /// Draw the circles detected
   for( size_t i = 0; i < circles.size(); i++ )
 {
  Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
  int radius = cvRound(circles[i][2]);
  std::cout << radius << std::endl;
  // circle center
  circle( croppedImage, center, 3, Scalar(0,255,0), -1, 8, 0 );
  // circle outline
  circle( croppedImage, center, radius, Scalar(0,0,255), 3, 8, 0 );
 }

 /// Show your results
 namedWindow( "Hough Circle Transform Demo", CV_NORMAL );
 imshow( "Hough Circle Transform Demo", croppedImage );

 namedWindow( "2", CV_NORMAL );
 imshow( "2", src );

 }`

私は多くの円のある線を持つ灰色の絵を持っています。それらの円は、右側が地獄色(白)で、左側から黒、白、黒…。すべての円を読み取って色を取得するアルゴリズムを C++ と openCV で作成しました。しかし、これは効率的ではありません。アルゴリズムを変更したいのですが、円またはエッジ検出の方法を使用したくありません。私は、最初の行からグレー画像を読み取り、この行で、連続するカラー パターン ( white, black, white, black) が片側から見つかった場合に検索するのが好きです。

誰でも私を助けることができますか?前もって感謝します

4

0 に答える 0