项目介绍–银行卡矫正(透视变换)
实现银行卡变换形状,给图片拉正
示例图:
实现思路:
1.读取图片
2.灰度图
3.canny边缘检测
4.霍夫直线检测
5.画出找到的四条直线
6.判断四条直线位置
7.求四条直线交点
8.获取交点存为矩阵
9.新矩阵的四个顶点
10.进行透视变换
代码实现:
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
/*
一般检测边缘 在灰度图
检测检测轮廓 在二值图
*/
Mat srcimg = imread("C:\\Users\\20435\\Desktop\\tu\\1.jpg");
imshow("【原图】", srcimg);
Mat grayimg;
cvtColor(srcimg, grayimg, COLOR_RGB2GRAY);
imshow("【灰度】", grayimg);
Mat bimg, gauess_img, bf_img,kernel;
GaussianBlur(grayimg, gauess_img, Size(5, 5), 0, 0);
imshow("高斯", gauess_img);
/* 2图用到的二值化 THRESH_BINARY_INV */
//adaptiveThreshold(grayimg, bimg, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY_INV, 501, 0);
//imshow("二值图", bimg);
Mat canny_img;
//小于a不是边缘 大于b是边缘 a-b根据连通性 决定是否为边缘
Canny(gauess_img, canny_img, 80, 120);
imshow("边缘", canny_img);
Mat dd_img;
dilate(canny_img, dd_img, kernel, Point(-1, -1));
imshow("边缘后膨胀", dd_img);
//检测完边缘过后 尝试检测