当前位置: 首页 > news >正文

一个网站做各种好玩的实验口碑好网站建设费用

一个网站做各种好玩的实验,口碑好网站建设费用,自己怎么做直播网站吗,中国建设官方网站首页本文实例为大家分享了PythonOpenCV实现图像的全景拼接的具体代码#xff0c;供大家参考#xff0c;具体内容如下 环境#xff1a;python3.5.2 openCV3.4 1.算法目的 将两张相同场景的场景图片进行全景拼接。 2.算法步骤 本算法基本步骤有以下几步#xff1a; 步骤1#x…本文实例为大家分享了PythonOpenCV实现图像的全景拼接的具体代码供大家参考具体内容如下 环境python3.5.2 openCV3.4 1.算法目的 将两张相同场景的场景图片进行全景拼接。 2.算法步骤 本算法基本步骤有以下几步 步骤1将图形先进行桶形矫正 没有进行桶形变换的图片效果可能会像以下这样图片越多拼接可能就会越夸张。本算法是将图片进行桶形矫正。目的就是来缩减透视变换Homography之后图片产生的变形从而使拼接图片变得畸形。 步骤2特征点匹配 本算法使用的sift算法匹配它具有旋转不变性和缩放不变性具体原理在之后会补上一篇关于sift算法的文章这里就不做详细介绍。 在匹配特征点的过程中透视矩阵选取了4对特征点计算公式为点的齐次坐标依赖于其尺度定义因此矩阵H也仅依赖尺度定义所以单应性矩阵具有8个独立的自由度。 如果在选取的不正确的特征点那么透视矩阵就可能计算错误所以为了提高结果的鲁棒性就要去除这些错误的特征点而RANSAC方法就是用来删除这些错误的特征点。 **RANSAC**用来找到正确模型来拟合带有噪声数据的迭代方法。基本思想数据中包含正确的点和噪声点合理的模型应该能够在描述正确数据点的同时摈弃噪声点。 RANSAC方法随机获取4对不同的特征匹配坐标计算出透视矩阵H1再将第二张图的特征匹配点经过这个矩阵H1映射到第一张图的坐标空间里通过计算来验证这个H1矩阵是否满足绝大部分的特征点。 通过迭代多次以满足最多特征匹配点的特征矩阵H作为结果。 这样正常情况就可以去除错误的特征点了除非匹配错误的特征点比正确的还多。 下图是我在嘉庚图书馆旁拍摄的照片的特征点匹配。步骤3利用得到的变换矩阵进行图片的拼接。 可以看出基本做到了无缝拼接。只是在色差上还是看得出衔接的部分存在。实现结果 我在宿舍里又多照了几组照片来实验 室内宿舍场景的特征点匹配拼接结果在室内的效果根据结果来看效果也还可以。 我测试了宿舍里景深落差较大的两张图片 特征点匹配虽然距离较远但是还是可以粗略的匹配到特征点。 拼接结果从结果上来看可以看得出来两张图片依然可以正确而粗略地拼接再一起可以看得出是同一个区域。只是由于特征点不够在细节上景深落差较大的还是没办法完美地拼接。 import numpy as np import cv2 as cv import imutils class Stitcher: def __init__(self): self.isv3 imutils.is_cv3()def stitch(self,imgs, ratio 0.75, reprojThresh 4.0, showMatches False): print(A)(img2, img1) imgs #获取关键点和描述符(kp1, des1) self.detectAndDescribe(img1)(kp2, des2) self.detectAndDescribe(img2) print(len(kp1),len(des1)) print(len(kp2), len(des2)) R self.matchKeyPoints(kp1, kp2, des1, des2, ratio, reprojThresh) #如果没有足够的最佳匹配点M为None if R is None: return None (good, M, mask) R print(M)#对img1透视变换M是ROI区域矩阵 变换后的大小是(img1.wimg2.w, img1.h)result cv.warpPerspective(img1, M, (img1.shape[1] img2.shape[1], img1.shape[0]))#将img2的值赋给结果图像result[0:img2.shape[0], 0:img2.shape[1]] img2 #是否需要显示ROI区域 if showMatches:vis self.drawMatches1(img1, img2, kp1, kp2, good, mask) return (result, vis) return resultdef detectAndDescribe(self,img): print(B)gray cv.cvtColor(img, cv.COLOR_BGR2GRAY) #检查我们使用的是否是penCV3.x if self.isv3: sift cv.xfeatures2d.SIFT_create()(kps, des) sift.detectAndCompute(img, None) else: sift cv.FastFeatureDetector_create(SIFT) kps sift.detect(gray) des sift.compute(gray, kps) kps np.float32([kp.pt for kp in kps]) # ********************************** #返回关键点和描述符 return (kps, des) def matchKeyPoints(self,kp1, kp2, des1, des2, ratio, reprojThresh): print(C) #初始化BF,因为使用的是SIFT 所以使用默认参数 matcher cv.DescriptorMatcher_create(BruteForce) # bf cv.BFMatcher() # matches bf.knnMatch(des1, des2, k2) matches matcher.knnMatch(des1, des2, 2) #*********************************** #获取理想匹配 good [] for m in matches: if len(m) 2 and m[0].distance ratio * m[1].distance: good.append((m[0].trainIdx, m[0].queryIdx)) print(len(good)) #最少要有四个点才能做透视变换 if len(good) 4: #获取关键点的坐标 # src_pts np.float32([kp1[m.queryIdx].pt for m in good]).reshape(-1, 1, 2) # dst_pts np.float32([kp2[m.trainIdx].pt for m in good]).reshape(-1, 1, 2) src_pts np.float32([kp1[i] for (_, i) in good]) dst_pts np.float32([kp2[i] for (i, _) in good]) #通过两个图像的关键点计算变换矩阵 (M, mask) cv.findHomography(src_pts, dst_pts, cv.RANSAC, reprojThresh) #返回最佳匹配点、变换矩阵和掩模 return (good, M, mask) #如果不满足最少四个 就返回None return Nonedef drawMatches(img1, img2, kp1, kp2, matches, mask, M): # 获得原图像的高和宽h, w img1.shape[:2] # 使用得到的变换矩阵对原图像的四个角进行变换获得目标图像上对应的坐标 pts np.float32([[0, 0], [0, h-1], [w-1, h-1], [w-1, 0]]).reshape(-1, 1, 2) dst cv.perspectiveTransform(pts, M) matchesMask mask.ravel().tolist() draw_params dict(matchColor (0, 255, 0), singlePointColor None, matchesMask matchesMask, flags 2)img cv.drawMatches(img1, kp1, img2, kp2, matches, None, **draw_params)return imgdef drawMatches1(self,img1, img2, kp1, kp2, metches,mask): print(D)(hA,wA) img1.shape[:2](hB,wB) img2.shape[:2] vis np.zeros((max(hA,hB), wAwB, 3), dtypeuint8)vis[0:hA, 0:wA] img1vis[0:hB, wA:] img2 for ((trainIdx, queryIdx),s) in zip(metches, mask): if s 1: ptA (int(kp1[queryIdx][0]), int(kp1[queryIdx][1])) ptB (int(kp2[trainIdx][0])wA, int(kp2[trainIdx][1])) cv.line(vis, ptA, ptB, (0, 255, 0), 1) return vis # def show(): # img1 cv.imread(image/sedona_left_01.png) # img2 cv.imread(image/sedona_right_01.png) # img1 imutils.resize(img1, width400) # img2 imutils.resize(img2, width400) # # stitcher cv.Stitcher() # (result, vis) stitcher.stitch([img1, img2]) # # (result, vis) stitch([img1,img2], showMatchesTrue) # # cv.imshow(image A, img1) # cv.imshow(image B, img2) # cv.imshow(keyPoint Matches, vis) # cv.imshow(Result, result) # # cv.waitKey(0) # cv.destroyAllWindows() # show() 以上就是本文的全部内容希望对大家的学习有所帮助也希望大家多多支持脚本之家。
http://www.zqtcl.cn/news/203641/

相关文章:

  • 办网站怎么赚钱做二手电脑的网站
  • 大型电子商务网站建设成本旅游网站前台怎么做
  • 深圳网站建设..网站点击图片放大
  • 上海企业扶持政策洛阳400电话洛阳网站seo
  • 保亭县住房城市建设局网站app免费制作平台下载
  • 抚州市建设局网站在网站做商城平台需要哪些资质
  • 潍坊专业网站建设多少钱素马设计官网
  • 深圳网站建设 套餐近期新闻事件
  • 网站开发外包维护合同淘宝客源码程序 爱淘宝风格+程序自动采集商品 淘宝客网站模板
  • 烟台企业网站开发军事新闻最新24小时
  • wordpress网站更换域名网站空间建站
  • 十堰网站建设公司电话网页设计与制作教程江西高校出版社
  • 英文网站seo常州建设局考试网站
  • wordpress 多网站哈尔滨 建网站
  • 免费网站源代码怎么制作网站教程
  • Thinkphp开发wordpress网站怎么优化seo
  • tp框架做视频网站站长统计芭乐鸭脖小猪
  • asp网站发布ftp国内f型网页布局的网站
  • 无限空间 网站四川省建设厅网站填报获奖
  • 广东佛山最新通知北京seo怎么优化
  • 浙江省通信管理局 网站备案 管理部门科技公司经营范围包括哪些
  • 网站域名备案转接入手续深圳外贸公司qc招聘
  • 湖北网站建设服务公司可以做产品推广的网站
  • 做经营性的网站备案条件wordpress删除菜单
  • js商城网站个安装wordpress
  • 想给学校社团做网站企业服务平台是做什么的
  • 网站推广渠道的类型wordpress看不到表格
  • 网站建设与推广实训报告册附近广告设计与制作门店电话
  • wordpress汉语公益网站开发使用api对seo
  • 北京网站优化前景seo网络推广专员