OpenCV中文网站

 找回密码
 立即注册
搜索
热搜: 安装 配置
查看: 4566|回复: 4

选取摄像头部分区域(任意四边形),然后拉伸放大该区域问

[复制链接]
发表于 2008-11-6 23:12:17 | 显示全部楼层 |阅读模式
求助,请问大家,如果实现:
选取摄像头部分区域(任意四边形),然后拉伸放大该区域。

注意:摄像头分辨率是320*240,而选取的区域是一个任意四边形,
选择完毕后需要把该区域拉升放到320*240,即生成一张新的320*240的图片,如下图


希望大家给点思路吧,有参考代码更好。
回复

使用道具 举报

发表于 2008-11-8 23:58:38 | 显示全部楼层

选取摄像头部分区域(任意四边形),然后拉伸放大该区域问

先求取任意四边形外接平行四边形;
按平行四边形做仿射变换;
回复 支持 反对

使用道具 举报

发表于 2008-11-9 11:47:38 | 显示全部楼层

选取摄像头部分区域(任意四边形),然后拉伸放大该区域问

求一个线性变换的矩阵,然后对图像的每一个点的坐标乘这个矩阵就可以了.
设C= [c11,c12;c21,c22];
四边形的四个顶点为(左上,右上,左下,右下).
A1,A2,A3,A4;
而图像的四个顶点为:
B1 = 0,0
B2 = width,0
B3 = 0,height
B4 = width,height

A1*C = B1
A2*C = B2
A3*C = B3
A4*C = B4
四个方程,4个未知数,就可以得到C了
然后对每个点的坐标都计算这个,最后再插值就行了.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-10 11:26:53 | 显示全部楼层

选取摄像头部分区域(任意四边形),然后拉伸放大该区域问

感谢 feixiaolin 兄弟 和 bebekifis版主 的回复,我自己也找到了一些资料,opencv已有相关的计算函数,
用cvWarpPerspective函数就可以实现透视变换。

参考下面连接:
<!-- m --><a class=\"postlink\" href=\"http://blog.csdn.net/hardVB/archive/2006/03/19/628983.aspx\">http://blog.csdn.net/hardVB/archive/200 ... 28983.aspx</a><!-- m -->

如果大家有更好的解决方案或想法也请一起分享和讨论吧。
回复 支持 反对

使用道具 举报

发表于 2008-11-12 09:28:49 | 显示全部楼层

选取摄像头部分区域(任意四边形),然后拉伸放大该区域问

我写的那个有问题,昨天和人讨论的时候发现的
每个等式是两个方程,所以其实是有8个方程,8个方程4个未知数一般是无解的.
所以单纯的线性变换可能不能满足你的要求.

用其次坐标就可以
原来的点的坐标是(x,y,1),现在的点的坐标是(X,Y,1)
构造他们之间的线性变换:H= [h11,h12,h13;h21,h22,h23;h31,h32,1];
最后一位是一个常数就可以.

然后8个方程,8个未知数,就能搞定.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|OpenCV中文网站

GMT+8, 2024-4-29 17:00 , Processed in 0.010140 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表