title: Using warpPerspective() on a sequence of points given by HoughCircles(), OpenCV
body: <p>I'm trying to detect the positions of billiards balls on a table from an image taken at a perspective angle. I'm using the getPerspectiveTransform() method to find the transformation matrix and I want to apply that to only the circles I detect using HoughCircles. I'm trying to go from a rather large trapezoidal shape to a smaller rectangular shape. I don't want to do the transformation on the image first and then find the HoughCircles because the image gets too warped for houghcircles to provide useful results.</p>
  
  <p>Here's my code:</p>
  
  <pre><code>        CvMat mmat = cvCreateMat(3,3,CV_32FC1);
          double srcX1 = 462;
          double srcX2 = 978;
          double srcX3 = 1440;
          double srcX4 = 0;
          double srcY = 241;
          double srcHeight = 772;
  
          double dstX = 56.8;
          double dstY = 33.5;
          double dstWidth = 262.4;
          double dstHeight = 447.3;
  
          CvSeq seq = cvHoughCircles(newGray, circles, CV_HOUGH_GRADIENT, 2.1d, (double)newGray.height()/40, 85d, 65d, 5, 50);
  
          JavaCV.getPerspectiveTransform(new double[]{srcX1, srcY, srcX2,srcY, srcX3, srcHeight, srcX4, srcHeight}, 
                    new double[]{dstX, dstY, dstWidth, dstY, dstWidth, dstHeight, dstX, dstHeight}, mmat);
          cvWarpPerspective(seq, seq, mmat);
  
  
          for(int j=0; j&lt;seq.total(); j++){
              CvPoint3D32f point = new CvPoint3D32f(cvGetSeqElem(seq, j));
  
              float xyr[] = {point.x(),point.y(),point.z()};
              CvPoint center = new CvPoint(Math.round(xyr[0]), Math.round(xyr[1]));
  
              int radius = Math.round(xyr[2]);
              cvCircle(gray, center, 3, CvScalar.GREEN, -1, 8, 0);
              cvCircle(gray, center, radius, CvScalar.BLUE, 3, 8, 0);
          }
  </code></pre>
  
  <p>The problem is I get this error on the warpPerspective() method:</p>
  
  <pre><code>error: (-215) seq-&gt;total &gt; 0 &amp;&amp; CV_ELEM_SIZE(seq-&gt;flags) == seq-&gt;elem_size in function cv::Mat cv::cvarrToMat(const CvArr*, bool, bool, int) 
  </code></pre>
  
  <p>Also I guess it's worth mentioning that I'm using JavaCV, in case the method calls look a bit different than what you're used to. Thanks for any help.</p>