最近几天我在寻找在图像中找到二次形状的好用和快速的方法。
例如,看看附加的图像。
我想找到白屏部分的边缘(在这种情况下是电视屏幕)。
我可以用我想要的任何东西替换白色 Canvas ,例如QR 码、一些纹理等 - 只是寻找那个形状的坐标。
形状的其他特征:
- 应该只检测一个形状。
- 应使用透视变换。
语言不是那么重要,但我想为此使用 OpenCV。
最佳答案
这些是已经在 OpenCV 中实现的很好的算法:
作为 GoodFeatureToTrackDetector
的 Harris 角点检测器
GoodFeaturesToTrackDetector harris_detector (1000, 0.01, 10, 3, true);
vector<KeyPoint> keypoints;
cvtColor (image, gray_image, CV_BGR2GRAY);
harris_detector.detect (gray_image, keypoints);
作为 FeatureDetector::create("FAST")
和 FASTX
Ptr<FeatureDetector> feature_detector = FeatureDetector::create("FAST");
vector<KeyPoint> keypoints;
cvtColor (image, gray_image, CV_BGR2GRAY);
feature_detector->detect (gray_image, keypoints);
或者
FASTX (gray_image, keypoints, 50, true, FastFeatureDetector::TYPE_9_16);
SIFT(尺度不变特征变换)作为 FeatureDetector::create("SIFT")
Ptr<FeatureDetector> feature_detector = FeatureDetector::create("SIFT");
vector<KeyPoint> keypoints;
cvtColor (image, gray_image, CV_BGR2GRAY);
feature_detector->detect (gray_image, keypoints);
Update透视变换(haned前必须知道的4点):
Point2f source [4], destination [4];
// Assign values to source and destination points.
perspective_matrix = getPerspectiveTransform( source, destination );
warpPerspective( image, result, perspective_matrix, result.size() );
关于opencv - 使用 OpenCV 检测图像中二次形状的最佳和最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30153227/