轉載自:
opencvjs getPerspectiveTransform,perspectiveTransform方法使用
OpenCV JavaScript版本,使用getPerspectiveTransform,PerspectiveTransform方法。
JavaScript和python版本不同的是Mat的创建方法不同,python会在内部自动把数据转换成Mat类,也JavaScript不会,所以刚开始没有找到JavaScript创建Mat方法,走了很多弯路。
这只是测试代码,没有使用项目中真实的数据,所有有一定的偏差。
如果有什么错误,欢迎纠正。
下面上代码:
- <!DOCTYPE html>
- <html>
-
- <head>
- <meta charset="utf-8">
- <title>Hello OpenCV.js</title>
- </head>
-
- <body>
- <h2>Hello OpenCV.js</h2>
- <h2>getPerspectiveTransform,PerspectiveTransform方法使用</h2>
- <p id="status">OpenCV.js is loading...</p>
- <div>
- <button onClick="myclick()">输出结果</button>
- </div>
- <script type="text/javascript">
- function myclick() {
- //代码 getPerspectiveTransform
- //创建数据
- let srcTri = cv.matFromArray(4, 1, cv.CV_32FC2, [56, 65, 368, 52, 28, 387, 389, 390]);
- let dstTri = cv.matFromArray(4, 1, cv.CV_32FC2, [0, 0, 300, 0, 0, 300, 300, 300]);
- //转换的数据
- let M = cv.getPerspectiveTransform(srcTri, dstTri);
- console.log("getPerspectiveTransform M", M);
-
- //==== PerspectiveTransform ======
- //point点的数据一定要是一维的,opencv会自己去处理
- let points = [
- 1, 2,
- 3, 4,
- 5, 6,
- 7, 8
- ];
- //原数据
- points = cv.matFromArray(4,1,cv.CV_32FC2,points);
- //转换后的数据
- let points_trans = new cv.Mat();
- cv.perspectiveTransform(points, points_trans,M);
- console.log("points", points);
- console.log("points_trans", points_trans);
-
- }
- function onOpenCvReady() {
- document.getElementById('status').innerHTML = 'OpenCV.js is ready.';
-
- }
- </script>
- <script async src="https://docs.opencv.org/4.x/opencv.js" onload="onOpenCvReady();" type="text/javascript"></script>
- <script src="https://docs.opencv.org/4.x/utils.js" type="text/javascript"></script>
- </body>
-
- </html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Hello OpenCV.js</title>
</head>
<body>
<h2>Hello OpenCV.js</h2>
<h2>getPerspectiveTransform,PerspectiveTransform方法使用</h2>
<p id="status">OpenCV.js is loading...</p>
<div>
<button onClick="myclick()">输出结果</button>
</div>
<script type="text/javascript">
function myclick() {
//代码 getPerspectiveTransform
//创建数据
let srcTri = cv.matFromArray(4, 1, cv.CV_32FC2, [56, 65, 368, 52, 28, 387, 389, 390]);
let dstTri = cv.matFromArray(4, 1, cv.CV_32FC2, [0, 0, 300, 0, 0, 300, 300, 300]);
//转换的数据
let M = cv.getPerspectiveTransform(srcTri, dstTri);
console.log("getPerspectiveTransform M", M);
//==== PerspectiveTransform ======
//point点的数据一定要是一维的,opencv会自己去处理
let points = [
1, 2,
3, 4,
5, 6,
7, 8
];
//原数据
points = cv.matFromArray(4,1,cv.CV_32FC2,points);
//转换后的数据
let points_trans = new cv.Mat();
cv.perspectiveTransform(points, points_trans,M);
console.log("points", points);
console.log("points_trans", points_trans);
}
function onOpenCvReady() {
document.getElementById('status').innerHTML = 'OpenCV.js is ready.';
}
</script>
<script async src="https://docs.opencv.org/4.x/opencv.js" onload="onOpenCvReady();" type="text/javascript"></script>
<script src="https://docs.opencv.org/4.x/utils.js" type="text/javascript"></script>
</body>
</html>
getPerspectiveTransform结果
perspectiveTransform结果