您的位置:首页 > 移动开发 > IOS开发

使用opencv,在iOS环境下检测边角点,然后画出最大矩形

2017-10-31 11:11 363 查看
直接看代码,具体环境这里就不说了

//  检测边角点,然后画出最大矩形
+ (UIImage*)opneCvdot:(UIImage*)image {
cv::Mat src;

UIImageToMat(image, src);

cv::Mat  grayMat;
cv::cvtColor(src,  grayMat, CV_BGR2GRAY);

//根据参数找出角点
std::vector<cv::Point2f> corners;

int maxCorners = 8; // // 最多检测到的角点数, 12
double qualityLevel = 0.05; // 阈值系数 0.01
double minDistance = 10; // 角点间的最小距离 10
int blockSize = 10; // 计算协方差矩阵时的窗口大小 10
bool useHarrisDetector = false; // 是否使用Harris角点检测,如不指定,则计算shi-tomasi角点, false
double k = 0.04; // Harris角点检测需要的k值 0.04

cv::goodFeaturesToTrack(cv::InputArray(grayMat), cv::OutputArray(corners), maxCorners, qualityLevel, minDistance, cv::Mat(), blockSize, useHarrisDetector, k);

//建立包围所有角点的矩形
cv::Rect rect = cv::boundingRect(cv::InputArray(corners));

//把每个检测到的角点在图中用圆形标识出来(方便调试)
for( int i = 0; i < corners.size(); i++ )
{
cv::circle(cv::InputOutputArray(grayMat), corners[i], 10, cv::Scalar(0,255,0), 2, 8, 0);
}
//把包围所有角点的矩形也画出来(方便调试)
cv::rectangle(grayMat, rect, cv::Scalar(0,255,0), 5, 8, 0);

return MatToUIImage(grayMat);
}


下面是原图和效果图

原图:



效果图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: