opencv - 使用 OpenCV 检测图像中二次形状的最佳和最快方法?

标签 opencv image-processing feature-detection

最近几天我在寻找在图像中找到二次形状的好用和快速的方法。

例如,看看附加的图像。

我想找到白屏部分的边缘(在这种情况下是电视屏幕)。

我可以用我想要的任何东西替换白色 Canvas ,例如QR 码、一些纹理等 - 只是寻找那个形状的坐标。

形状的其他特征:

  • 应该只检测一个形状。
  • 应使用透视变换。

Source: Google.com

语言不是那么重要,但我想为此使用 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/

相关文章:

opencv - 使用createTrackbar显示类型

opencv - 更改 OpenCV 视频文件分辨率

python - opencv python中cv2.NORM_L2和cv2.NORM_L1的区别

opencv - 从特征关键点在 OpenCV 中手动进行成对匹配

python - 无法在 Python 3.5 DLL 加载失败时导入 cv2

java - OpenCV Android : how to find all max locations of a Mat

visual-studio - OpenCV - 获取视频帧内检测到的图像的法线

python - 如何使用 OpenCV 和 Python 的蒙版(或透明度)在图像中查找模板?

python - 通过严格比较对函数进行向量化,以在 2D 数组中查找局部最小值和最大值

c++ - cvSnakeImage() OpenCV API 示例/文档