Ask Your Question

Ilya Lysenkov's profile - activity

2017-10-02 16:32:19 -0600 received badge  Good Answer (source)
2017-08-24 15:09:52 -0600 received badge  Good Answer (source)
2017-08-24 15:09:52 -0600 received badge  Nice Answer (source)
2017-01-06 00:41:58 -0600 received badge  Taxonomist
2016-09-19 03:17:56 -0600 received badge  Nice Answer (source)
2015-07-25 01:04:55 -0600 received badge  Nice Answer (source)
2015-05-18 14:32:38 -0600 received badge  Great Answer (source)
2015-03-03 03:35:08 -0600 received badge  Nice Answer (source)
2014-11-07 09:35:18 -0600 received badge  Guru (source)
2014-11-07 09:35:18 -0600 received badge  Great Answer (source)
2014-09-24 12:27:27 -0600 received badge  Guru (source)
2014-09-24 12:27:27 -0600 received badge  Great Answer (source)
2014-08-16 22:58:41 -0600 answered a question Python Camera Calibration Square Size Seems To Have No Effect

Actually, camera matrix and distortion coefficients don't depend on square size. It makes sense: they are intrinsic parameters of a camera and they don't depend on particular images which you show to the camera. However, poses of the camera do depend on square size. Again it makes sense: if a chessboard filled the whole image but square size is very small then it means the camera is very close to the pattern. But if square size is large then it means the camera is farther from the pattern.

You can check it yourself by adding

print tvecs

to the end of the calibrate.py, which will print translational component of the poses.

So, if you want to get just intrinsics (camera matrix and distortion) it doesn't matter which square size you specify (you can use just the default value). If you want to get extrinsics (rvecs and tvecs, that is poses of a camera) then you should specify accurate square size to get valid results.

2014-08-08 02:25:54 -0600 received badge  Good Answer (source)
2014-08-07 23:56:31 -0600 received badge  Nice Answer (source)
2014-08-07 12:33:58 -0600 answered a question how to detect ellipse and get centers of ellipse

You can try to use SimpleBlobDetector which is tuned to detect circular blobs.

Here is complete code for detection:

Mat image = imread("image.jpg");
Ptr<FeatureDetector> blobsDetector = FeatureDetector::create("SimpleBlob");
vector<KeyPoint> keypoints;
blobsDetector->detect(image, keypoints);

visualization:

Mat drawImage = image.clone();
for (size_t i = 0; i < keypoints.size(); ++i)
    circle(drawImage, keypoints[i].pt, 4, Scalar(255, 0, 255), -1); 
imwrite("result.png", drawImage);

and achieved results: detected corners

Check out the description of the algorithm and its parameters in the official docs.

2013-09-23 08:57:56 -0600 received badge  Nice Question (source)
2013-09-22 23:37:35 -0600 marked best answer How to convert cv::Mat to std::string?

I would like to store cv::Mat in std::string and read it back. Is there an easy way to do this using OpenCV?

2013-06-05 05:06:27 -0600 received badge  Good Answer (source)
2013-02-26 07:20:01 -0600 received badge  Good Answer (source)
2012-12-13 10:36:47 -0600 answered a question Is there something wrong with circle grid with patternSize of 4 * 3 ?

Hi,

I can reproduce your problem and indeed the second grid is not detected with the default method. You can use the second available method as a workaround. The code becomes like this:

findCirclesGrid(image, patternSize, centers, CALIB_CB_SYMMETRIC_GRID + CALIB_CB_CLUSTERING)

The 4x3 grid was detected in this case.

P.S. It seems to be a bug that the grid was not detected initially so please fill in a bug report at http://code.opencv.org.

2012-12-12 14:11:03 -0600 commented answer findCirclesGrid

This is a strange situation. Could you please send me an example of your images?

2012-12-05 04:58:50 -0600 received badge  Nice Answer (source)
2012-10-30 23:33:15 -0600 answered a question findCirclesGrid in Python

Hi,

Your pattern in the sample image is either too distorted or it was generated incorrectly (points have to be in specific locations, just visual similarity to the OpenCV pattern is not enough). According to documentation the flag CALIB_CB_CLUSTERING is suitable in such cases because you have distortion but don't have background clutter. Code becomes:

image = cv2.imread('/mypath/myimage.png')
shape = (3, 11)
[isFound, centers] = cv2.findCirclesGrid(image, shape, flags = cv2.CALIB_CB_ASYMMETRIC_GRID + cv2.CALIB_CB_CLUSTERING)

This code works for me and your sample image: isFound is True and detected centers have correct locations.

2012-10-30 23:01:08 -0600 commented question findCirclesGrid
2012-10-30 22:58:45 -0600 commented question findCirclesGrid NOT Working

@mgb Perhaps you should change parameters of a blob detector (see my answer below). In my experiments detection of the circle grid is more stable than chessboard.

2012-10-30 22:55:31 -0600 answered a question findCirclesGrid NOT Working

Hi,

Circles that have big area are filtered out by default. Your image has rather high resolution and size of circles is bigger than the default threshold. You can change your code as this to get it working:

Mat image = imread("Untitled.png");
Size patternSize(4, 11);
vector<Point2f> centers;

SimpleBlobDetector::Params params;
params.maxArea = 10e4;
Ptr<FeatureDetector> blobDetector = new SimpleBlobDetector(params);

bool isFound = findCirclesGrid(image, patternSize, centers, CALIB_CB_ASYMMETRIC_GRID, blobDetector);

The main application of findCirclesGrid is camera calibration and so default parameters are tuned to eliminate false detections because it is much worse for calibration than several miss-detections. You can change parameters if they doen't satisfy you. For example, I use the following parameters with Kinect camera (VGA resolution):

SimpleBlobDetector::Params params;
params.minArea = 10;
params.minDistBetweenBlobs = 5;

Also I use the flag CALIB_CB_CLUSTERING. The pattern is detected in ~99% of my images with these parameters.

2012-10-30 04:39:04 -0600 received badge  Good Answer (source)
2012-10-10 13:09:21 -0600 commented answer findCirclesGrid

Yeah, I agree, it is not very clear.

2012-10-05 22:31:13 -0600 commented question findCirclesGrid extremly slow

Please post an example of your image, code where you call findCirclesGrid and write how much time does it take (in seconds) to process this image.

2012-10-05 10:58:23 -0600 commented question Linux users: Stay away from OpenCV Version 2.4.2!

I'm using OpenCV 2.4.2 in my project solely under Linux and it works perfectly fine for me and my colleagues. Please be more specific and write about issues you encounter.

2012-10-04 14:29:08 -0600 commented question operations on cv::Point

Actually you have these functions for Points:

Point a, b;

//...

double dotProduct = a.dot(b);

double crossProduct = a.cross(b);

double length = norm(a);

What do you mean by isEmpty()? cv::Point always contain some data (e.g. zeros by default) so it cannot be empty.

Could you please provide more specific examples of missing functions?