用Opencv给韦小宝的身份证透视变换
上一节我们说了 opencv
的安装教程,这次我们来实战一波~
有时候我们项目上需要身份证识别,但是有的人拍的身份证不是倒的,就是歪的。让后台去识别很麻烦,经常识别不准。但有了 opencv
的透视变换,你再怎么歪,我也能帮你矫正过来。
透视变换原理
透视变换(Perspective Transformation)是将成像投影到一个新的视平面(Viewing Plane),也称作投影映射(Projective Mapping)。如图所示
JAVA 实现
首先获取身份证四个点的坐标,https://uutool.cn/img-coord/
这个网站可以在线获取图片坐标,实际在项目的时候,这四个点的坐标可以让前端传递给你。
通过工具我们获取到了四个点的坐标,分别是 [376,133],[205,422],[29,316], [194,26]
import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.utils.Converters;import java.util.List;public class PerspectiveTransform {public static void main(String[] args) {String srcImgPath = "/home/IdeaProjects/opencv-java/src/main/resources/2020-09-13_11-55.png";String x1 = "104,278";String x2 = "523,49";String x3 = "652,235";String x4 = "223,491";String destImgPath = "/home/IdeaProjects/opencv-java/src/main/resources/test5.png";perspectiveTransform(srcImgPath,x1,x2,x3,x4,destImgPath);}private static void perspectiveTransform(String srcImgPath,String x1, String x2,String x3,String x4, String destImgPath){System.loadLibrary(Core.NATIVE_LIBRARY_NAME);Mat src = Imgcodecs.imread(srcImgPath);// 读取图像到矩阵中,取灰度图像if (src.empty()) {return;}try {Mat dst = new Mat();List<Point> listSrcs = java.util.Arrays.asList(getPoint(x1), getPoint(x2),getPoint(x3), getPoint(x4));Mat srcPoints = Converters.vector_Point_to_Mat(listSrcs, CvType.CV_32F);List<Point> listDsts = java.util.Arrays.asList(new Point(0, 0), new Point(1011, 0),new Point(1011, 638), new Point(0, 638));Mat dstPoints = Converters.vector_Point_to_Mat(listDsts, CvType.CV_32F);Mat perspectiveMmat = Imgproc.getPerspectiveTransform(srcPoints, dstPoints);Size size = new Size(new Point(1011, 638));Imgproc.warpPerspective(src, dst, perspectiveMmat, size, Imgproc.INTER_LINEAR);Mat gray = gray(dst);Imgcodecs.imwrite(destImgPath, gray);} catch (Exception e) {e.printStackTrace();}}private static Point getPoint(String points) {if (points == null || "".equals(points)) {throw new NullPointerException("坐标参数为空");}String[] split = points.split(",");if (split.length == 0) {throw new NullPointerException("坐标参数为空");}return new Point(Double.valueOf(split[0]), Double.valueOf(split[1]));}/*** 作用:灰度化** @param src Mat矩阵图像* @return*/public static Mat gray(Mat src) {Mat gray = new Mat();if (src.channels() == 3) {Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGR2GRAY);src = gray;} else {System.out.println("The Image File Is Not The RGB File!");}return src;}
}
透视变化+灰度化 后的:
本项目所有代码地址:https://gitee.com/feiling0825/opencv-java
觉得写的不错话,还是希望能给个Star的
参考
详解 OpenCV 透视变换原理 及 实例
Java基于opencv—透视变换矫正图像
用Opencv给韦小宝的身份证透视变换相关推荐
- python怎么让x轴45°展示_python opencv实现任意角度的透视变换实例代码
本文主要分享的是一则python+opencv实现任意角度的透视变换的实例,具体如下: # -*- coding:utf-8 -*- import cv2 import numpy as np def ...
- Opencv 原图像素坐标点透视变换后对应坐标点
已知原图img一像素点坐标p(x,y),变换前矩阵坐标pts1,变换后矩阵坐标pts2,求变换后p点对应坐标 #求变换矩阵M M = cv2.getPerspectiveTransform(pts1, ...
- python写透视挂_python opencv实现任意角度的透视变换实例代码
本文主要分享的是一则python+opencv实现任意角度的透视变换的实例,具体如下: # -*- coding:utf-8 -*- import cv2 import numpy as np def ...
- opencv:畸变矫正:透视变换算法的思想与实现
畸变矫正 注意:虽然能够成功矫正但是也会损失了部分图像! 透视变换(Perspective Transformation) 概念: 透视变换是将图片投影到一个新的视平面(Viewing Plane), ...
- C++ OpenCV手动截取图像做透视变换
学更好的别人, 做更好的自己. --<微卡智享> 本文长度为2683字,预计阅读6分钟 前言 以前文章<C++ OpenCV检测并提取数字华容道棋盘>中有部分是用到了透视变换, ...
- 【opencv+mfc】实现身份证上的身份证号识别
参考了很多网上的博客资源,有些只讲了如何提取身份证区域,有些只讲了如何做训练集.我将各个方法做了一些筛选和整合.身份证素材均来自网络. 实验目标 完成身份证识别程序,通过输入一张身份证图片,可以自动识 ...
- python opencv 实现任意角度的透视变换
任意角度 数据增强: https://blog.csdn.net/jacke121/article/details/106363307 # -*- coding:utf-8 -*- import cv ...
- 【OpenCV】透视变换 Perspective Transformation(续)
透视变换的原理和矩阵求解请参见前一篇<透视变换 Perspective Transformation>.在OpenCV中也实现了透视变换的公式求解和变换函数. 求解变换公式的函数: [cp ...
- 【OpenCV】透视变换 Perspective Transformation
透视变换的原理和矩阵求解请参见前一篇<透视变换 Perspective Transformation>.在OpenCV中也实现了透视变换的公式求解和变换函数. 求解变换公式的函数: Mat ...
- 【opencv】关于透视变换
学习opencv透视变换的时候联想到之前红外匹配的项目,关于变换矩阵的求解,简单记录一下学习到的相关博客. 4_2_图像几何变换 - OpenCV中文官方文档 opencv 透视变换_zhangjun ...
最新文章
- p187让元素垂直居中
- linux 2.6.36代码构架,Linux 内核笔记(2.6.36)(二)
- tornado 08 数据库-ORM-SQLAlchemy-表关系和简单登录注册
- 《Python数据挖掘:概念、方法与实践》一2.4 小结
- mac下charles使用教程
- c语言数独合法验证,JavaScript数独验证
- 学以致提高学生操作计算机能力,学用结合,学以致用
- 弘辽科技:淘宝旧链接如何打新品标?有什么规则?
- matlab相对强度噪声,噪声强度(噪声功率)、SNR、dBW
- linux系统实训总结报告,《linux操作系统实训》总结报告 - 图文
- Linux 压缩(打包)文件夹 tar/zip
- centos7 开机自动启动程序
- airdrop搜不到对方_如何在Mac的Finder中将AirDrop添加到收藏夹侧边栏
- MySQL 的 Buffer Pool,终于被我搞懂了
- c语言编程设计实验课件,c语言程序设计实验课件.ppt
- 使用HM NIS Edit制作软件安装包
- PUCCH format2中的RM码(reed muller code)和Polar码
- AI vs ML:有什么区别?
- java读入一个不确定长度的一维数组
- UI设计师就业发展前景如何?