Hyn*_*rix 7 c++ opencv roi surf feature-detection
我想将SurfFeatureDetector限制为一组区域(掩码).对于测试,我只定义一个掩码:
Mat srcImage; //RGB source image
Mat mask = Mat::zeros(srcImage.size(), srcImage.type());
Mat roi(mask, cv::Rect(10,10,100,100));
roi = Scalar(255, 255, 255);
SurfFeatureDetector detector();
std::vector<KeyPoint> keypoints;
detector.detect(srcImage, keypoints, roi); // crash
//detector.detect(srcImage, keypoints); // does not crash
Run Code Online (Sandbox Code Playgroud)
当我通过"roi"作为掩码时,我得到了这个错误:
OpenCV Error: Assertion failed (mask.empty() || (mask.type() == CV_8UC1 && mask.size() == image.size())) in detect, file /Users/ux/Downloads/OpenCV-iOS/OpenCV-iOS/../opencv-svn/modules/features2d/src/detectors.cpp, line 63
Run Code Online (Sandbox Code Playgroud)
这有什么问题?如何正确地将掩码传递给SurfFeatureDetector的"detect"方法?
问候,
Ale*_*xey 16
关于面具的两件事.
CV_8U
.在您的情况下,掩码是srcImage.type()类型,它是一个3通道矩阵roi
检测器,但你应该过去mask
.当你进行更改时roi
,你也在改变mask
.以下应该有效
Mat srcImage; //RGB source image
Mat mask = Mat::zeros(srcImage.size(), CV_8U); // type of mask is CV_8U
// roi is a sub-image of mask specified by cv::Rect object
Mat roi(mask, cv::Rect(10,10,100,100));
// we set elements in roi region of the mask to 255
roi = Scalar(255);
SurfFeatureDetector detector();
std::vector<KeyPoint> keypoints;
detector.detect(srcImage, keypoints, mask); // passing `mask` as a parameter
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19400 次 |
最近记录: |