opencv - opencv 将倾斜视图转换为平面视图
问题描述
这是我用 USB 相机拍摄的照片。我的相机与水平线有一个角度,目标在底部,平行线和正交线划定矩形。便利贴是中心矩形的控制标记。
然后我处理了几个分步处理,以调整视图的“倾斜”并提取线条。这是没有变换的线提取:
{"type":"toGray"} => mat.cvtColor(cv4.COLOR_BGR2GRAY);
{"type":"toBlur","size":10} => mat.gaussianBlur(new cv4.Size(size, size),0);
{"type":"toCanny","low":50,"high":150} => mat.canny(low_threshold, high_threshold);
{"type":"getLines","rho":1,"theta":0.01745329222222222,"threshold":15,"min_line_length":50,"max_line_gap":20 }] => 让行 = mat.houghLinesP(rho , theta, 阈值, min_line_length, max_line_gap);
现在,我想在提取线条之前使用“warpAffine”功能校正视图倾斜。我选择居中矩形的四个点,以构建两个“三点数组”(src,dst):
matTransf = cv4.getAffineTransform( srcPoints, dstPoints);
resultMat = mat.warpAffine( matTransf, new cv4.Size( mat.cols, mat.rows));
错误在哪里?
我也试过:
// four points at each corner of the rectangle, srcPoints for the picture, and dstPoints for the theoric shape
// With getPerspectiveTransform
matTransf = cv4.getPerspectiveTransform( srcPoints, dstPoints);
resultMat = mat.warpPerspective( matTransf, new cv4.Size( mat.cols, mat.rows));
// With findHomography
let result = cv4.findHomography( srcPoints, dstPoints);
matTransf = result.homography;
resultMat = mat.warpPerspective( matTransf, new cv4.Size( mat.cols, mat.rows));
此致。
解决方案
变换不是亲和,而是单应性描述的视角。在图像中选择物理矩形的四个角,将它们映射到与物理矩形具有相同纵横比的矩形中的点,从它们估计单应性(findHomography),最后扭曲(warpPerspective)。
推荐阅读
- python - NoSuchElementException:消息:无法找到元素:[id="faturaspnl.aba"]
- python - Python tkinter:他为什么要退出?
- mysql - 选择具有多个类别的用户
- spring-boot - 如何将 application.yaml 中的值注入 Junit 5 测试用例
- bash - 编辑外壳文件时,您不拥有文件外壳弹出窗口
- python - numpy 获取多维数组的数字的多个索引
- css - 背景动画忽略FF中的边框半径
- php - 错误:此路由不支持 POST 方法。支持的方法:GET、HEAD。- 使用 laravel livewire
- rdf - 在 RDF N-Triples 中使用 IRI
- flutter - Flutter:自动完成建议显示“对象实例”而不是名称