首页 > 编程知识 正文

opencv能做什么,opencv gaussianblur

时间:2023-05-06 02:16:45 阅读:19625 作者:2738

文章目录Homography是什么? 使用Homography进行“图像配准”全景拼接) Homography的重要应用是如何计算Homography的? homograph y APP虚拟招牌

来自3https://www.learn opencv.com/homograph y-examples-using-opencv-python-c /。

根据个人喜好稍加修改,侵权删除。

根据圣经神话,巴别塔(The Tower of Babel )是人类最早的工程灾难。 这个项目具备了一切条件,但仍然失败了。 由于上帝混淆了人类的语言,他们无法进行更有效的沟通合作,导致了通天塔的倒塌和人类的混乱。

我想像Homography这样的术语总是提醒我们,我们还在遭受由语言构成的交流鸿沟的折磨。Homography是一个非常简单的概念,但它给我起了一个很虚伪的名字。

什么是Homography? 考虑同一平面(例如书皮)的两张图像,红点表示同一物理坐标点位于两张图像上的每个位置。 在CV术语中称为对应点。

Homography是将一个图像上的点映射到另一个图像上的对应点的3x3变换矩阵。

ahomographyisatransformation (a3 x 3矩阵) thatmapsthepointsinoneimagetothecorrespondingpointsintheotherimage。

因为Homography是3x3的矩阵,所以我可以写这个

对于图中一对对应点,位于图1的(x1,y1 )和位于图2的(x2,y2 ).h构筑两者的映射关系

对于所有对应点,只要它们位于同一物理平面上,使用Homography的“图像对齐”(Image Alignment )就满足上述条件。 换句话说,可以将图1中的书皮上的所有点映射到图2中的书皮上。 也就是说,图1的书皮和图2的书皮看起来是对齐的。 下图:

那么,关于不在这个平面上的点呢? 此时,如果应用Homography,则无法与对应点对齐。 例如,上图中的桌面、地板、橱柜方面。 如果此类图像中有多个平面,则必须为每个平面使用相应的Homography。

全景拼接: Homography的一个重要应用是前面的例子,我们知道如果知道两个图像的Homography,就可以将一个图像warp移动到另一个图像中。 但是,这里严重的错误:的两张图像必须包含同一平面,只有这个平面上的点必须正确对齐。事实上,可以证明,如果你用相机拍摄一张任意风景的照片(不仅仅是一个平面)然后旋转相机再任意拍摄一张,这两张照片可以用一个 Homography 联系起来!刚才拍摄的任意两张3D场景的图像可以在Homography中联系起来,但两张图像有共同的区域。 这些区域也可以用于对齐和拼接。 bingo 这样,就可以得到这两张图像的全景连接图。 当然,这还是粗糙的全景拼接,也需要很多精细的操作,但基本原理是这样的。 在Homography中对齐共同部分,巧妙连接,使连接不可见。 把全景连接起来,完成大业。

怎么计算Homography? 对于h矩阵,H22通常为1,因此h有8个未知参数。 求解至少需要八个等式。 因为一组对应点可以提供两个等式,所以求h至少需要四组对应点(任意三点不同线)。 如果有更多的应对点,就会更有效。 OpenCV可以鲁棒地计算最适合所有对应点的Homography。 通常,图像之间的这些对应点通过SIFT或SURF这样的算法进行自动特征提取和匹配。 当然,对于简单的demo,手动选择对应点就足够了。

欧培力

//pts_src :元图像点坐标//pts_dst :结果图像坐标//数据类型均需要vectorPoint2f.//对应点至少4组。 math=findhomography(pts_SRC, pts_ /im_src :源图像//im_dst :结果图像//h:在上一步骤中计算的Homography//size : im_dst的大小(宽度、高度)/im _ dst src points.push _ back (point 2f (1,1 ); cv :持久性传输(src points,dstPoints,warpMatrix ); 举个例子吧

> #include "opencv2/opencv.hpp" using namespace cv;using namespace std; int main( int argc, char** argv){ // Read source image. Mat im_src = imread("book2.jpg"); // Four corners of the book in source image vector<Point2f> pts_src; pts_src.push_back(Point2f(141, 131)); pts_src.push_back(Point2f(480, 159)); pts_src.push_back(Point2f(493, 630)); pts_src.push_back(Point2f(64, 601)); // Read destination image. Mat im_dst = imread("book1.jpg"); // Four corners of the book in destination image. vector<Point2f> pts_dst; pts_dst.push_back(Point2f(318, 256)); pts_dst.push_back(Point2f(534, 372)); pts_dst.push_back(Point2f(316, 670)); pts_dst.push_back(Point2f(73, 473)); // Calculate Homography Mat h = findHomography(pts_src, pts_dst); // Output image Mat im_out; // Warp source image to destination based on homography warpPerspective(im_src, im_out, h, im_dst.size()); // Display images imshow("Source Image", im_src); imshow("Destination Image", im_dst); imshow("Warped Source Image", im_out); waitKey(0);} Homography 应用 虚拟广告牌

在很多直播体育赛事中,广告是动态插入到直播视频流中去的,从而根据观众的个人喜好,地域习俗等展示个性化的广告。

以下是第一张上传到互联网的图片

[外链图片转存失败(img-A1fUf1PJ-1568973089922)(https://www.learnopencv.com/wp-content/uploads/2016/01/first-image.jpg)]

下图是 时代广场的 图片

[外链图片转存失败(img-Hgmsqxvc-1568973089922)(https://www.learnopencv.com/wp-content/uploads/2016/01/times-square-768x512.jpg)]

好了,我们想把 第一张图嵌入到 时代广场的 广告屏上去,4 步搞定

选择时代广场上广告屏的 4 个顶点,作为 pts_dst选取欲嵌入的图像的 4 个顶点,假设图像尺寸 W x H, 那么 四个顶点就是 (0,0), (0, W-1), (H - 1, 0), (H - 1, W - 1)使用 pts_dst 和 pts_src 计算 Homography对 源图像应用计算得到的 Homography 从而 混合到 目标图像上。得到下图

[外链图片转存失败(img-av2EKXBw-1568973089922)(https://www.learnopencv.com/wp-content/uploads/2016/01/virtual-billboard-768x512.jpg)]

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。