牙叔教程简单易懂
原图效果思路提取中间扑克的矩形轮廓--仿射变换
步骤1)高斯滤波平滑图像,图像基本没变化
Imgproc.GaussianBlur(img.mat,gaussianBlurMat,Size(5,5),0);
2)转灰度图
Imgproc.cvtColor(gaussianBlurMat,grayMat,Imgproc.COLOR_RGBA2GRAY);
3)Canny边缘检测
Imgproc.Canny(grayMat,cannyMat,lowThreshold,lowThreshold*ratio,kernel_size,false);
4)开运算
我们要提取扑克的轮廓,上一步的边缘检测,图片中间最大的矩形四条边是断开的,我们要把矩形四条边闭合
Imgproc.morphologyEx(cannyMat,closeMat,Imgproc.MORPH_CLOSE,Imgproc.getStructuringElement(Imgproc.MORPH_RECT,Size(7,7)));
5)画轮廓
我们只检测最外围轮廓,并且画的时候填充轮廓,可以看到一个大概的矩形
Imgproc.findContours(closeMat,contours,hierarchy,Imgproc.RETR_EXTERNAL,Imgproc.CHAIN_APPROX_SIMPLE,Point());Imgproc.drawContours(img.mat,contours,-1,Scalar(0,,0,),-1,8);
6)在灰度图上填充轮廓
Imgproc.drawContours(closeMat,contours,-1,Scalar(),-1,8);
7)开运算,只剩下最大的轮廓了
Imgproc.morphologyEx(closeMat,closeMat,Imgproc.MORPH_OPEN,Imgproc.getStructuringElement(Imgproc.MORPH_RECT,Size(55,55)));
8)最小外接矩形
他这个最小外接矩形,我是不认同的
for(letj=0;j4;j++){Imgproc.line(img.mat,rect[j],rect[(j+1)%4],Scalar(0,0,,),5,8);}
9)我决定倒退至6)在灰度图上填充轮廓
10)除了最大的轮廓,其他小轮廓都填充为黑色
//先排序轮廓contours.sort(newComparator({