所在的位置: js >> js介绍 >> autojs摆正扑克用opencv

autojs摆正扑克用opencv

牙叔教程简单易懂

原图效果思路

提取中间扑克的矩形轮廓--仿射变换

步骤

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({


转载请注明:http://www.aierlanlan.com/rzfs/6636.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了