利用OpenCV建立视差图像

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

推荐阅读

42个pycharm使用技巧,瞬间从黑铁变王者

Google C++项目编程风格指南 (中文版) 分享

视差

让我们分解一下这个过程

深度图

让我们看看如何编写此工具的代码

import os, sysimport numpy as npimport pygame as pgimport cv2
img = cv2.imread('moon.jpg', flags=cv2.CV_8UC4)depth_map = cv2.imread('moon_depth_map.png')depth_map = cv2.cvtColor(depth_map,cv2.COLOR_RGB2GRAY)img = cv2.resize(img, depth_map.shape[:2])
layers = [] prev_thres = 255div=30 for thres in range(255 - div, 0, -div): ret, mask = cv2.threshold(depth_map, thres, 255, cv2.THRESH_BINARY) ret, prev_mask = cv2.threshold(depth_map, prev_thres, 255, cv2.THRESH_BINARY) prev_thres = thres inpaint_img = cv2.inpaint(img, prev_mask, 10, cv2.INPAINT_NS) layer = cv2.bitwise_and(inpaint_img, inpaint_img, mask = mask) layers.append(conv_cv_alpha(layer, mask)) # adding last layer mask = np.zeros(depth_map.shape, np.uint8) mask[:,:] = 255 ret, prev_mask = cv2.threshold(depth_map, prev_thres, 255, cv2.THRESH_BINARY) inpaint_img = cv2.inpaint(img, prev_mask, 10, cv2.INPAINT_NS) layer = cv2.bitwise_and(inpaint_img, inpaint_img, mask = mask)layers.append(conv_cv_alpha(layer, mask)) layers = layers[::-1]
def conv_cv_alpha(cv_image, mask): b, g, r = cv2.split(cv_image) rgba = [r, g, b, mask] cv_image = cv2.merge(rgba,4) return cv_image
face_cascade = cv2.CascadeClassifier( 'haarcascade_frontalface_default.xml')
def get_face_rect(img): gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) face_rects = face_cascade.detectMultiScale(gray_img, 1.3, 5) if len(face_rects) == 0: return () return face_rects[0]
scale = 1off_set = 20width, height = layers[0].get_width(), layers[0].get_height() win = pg.display.set_mode((int((width - off_set)*scale), int((height - off_set)*scale))) pg.display.set_caption('Parallax_image')scaled_layers = [] for layer in layers: scaled_layers.append(pg.transform.scale(layer, (int(width*scale), int(height*scale))))cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
x_transform = True # allow shift in x-axisy_transform = False # allow shift in y-axissens = 50 # the amount of scale down of shift valueshow_cam = False # show your face camshift_x = 0 shift_y = 0 run = True
while run: for event in pg.event.get(): if event.type==pg.QUIT: run = False ret, frame = cap.read() frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) initial_pos = (frame.shape[0]/2, frame.shape[1]/2) face_rect = get_face_rect(frame) if len(face_rect) != 0: x,y,w,h, = face_rect face_rect_frame = cv2.rectangle(frame, (x, y), (x + w, y + h), (255,255,0), 3) shift_x = (initial_pos[0] - (x + w/2))/(sens*scale) shift_y = (initial_pos[1] - (y + h/2))/(sens*scale) win.fill((255, 255, 255)) for i, layer in enumerate(scaled_layers): new_x = -off_set/2 new_y = -off_set/2 if x_transform: new_x = 0 + shift_x*i if y_transform: new_y = 0 + shift_y*i win.blit(layer, (new_x, new_y)) face_rect_frame = cv2.resize(face_rect_frame, (100, 100)) if show_cam: win.blit(conv_cv_pygame(face_rect_frame), (0, 0)) pg.display.update()cap.release()cv2.destroyAllWindows()pg.quit()

最终结果

不同图像的演示

下载1:OpenCV-Contrib扩展模块中文版教程
(0)

相关推荐

  • 弹幕君,别挡着我看小姐姐!

    某天代码写得老眼昏花,去B站上摸鱼,突然发现奇怪的现象: 哟呵,B站竟然做了视频前景提取,把弹幕藏到画面人物的后面.识别效果还意外地不错呢. 然后又翻了下,发现这是个叫做"智能防挡弹幕&qu ...

  • 用 Python 为老师送上节日的祝福

    来源:Python 技术「ID: pythonall」 提到老师,大家首先想到的可能就是在学校中教我们文化课的人,除此之外,在生活或工作中给予我们指导及帮助的人也可称之为老师,今天是教师节,本文我们就 ...

  • 利用OpenCV实现图像修复(含源码链接)

    图像修复技术应用在什么地方呢? 想想一下,我们有一张非常棒的相片,但是由于时间比较久远,没有电子版留底,而纸质版的又十分不便于保存.因此长采用扫描的方式获得电子版.但是非常不幸,扫描过程中落入了一根头 ...

  • 利用3D-Slicer校准畸变图像

    作者:王奎重   济南军区总医院 神经外科 文章所有权归属作者,如需转载或引用图文请联系作者并注明出处.更多3DSlicer教程请关注公众号:SlicerCN(3DSlicer社区) 导言 在医学图像 ...

  • 使用Python中的OpenCV降噪功能增强图像的3个步骤

    重磅干货,第一时间送达 在本文中,我们将展示如何通过三个简单的步骤来实现降噪.我们将使用机器学习训练的降噪模型.这是我们找到的最好的降噪模型之一. 程序可以判断图像是否有噪点吗?这对于另一个项目可能是 ...

  • 结合实际需求,在webapi内利用WebSocket建立单向的消息推送平台

    结合实际需求,在webapi内利用WebSocket建立单向的消息推送平台

  • 利用微信建立客户关系 ,这37招非常有戏!

    这些小技巧都是实用型的,学会了定会让你事半功倍. 01 微信里面有分组,但是很少有人会用到,利用好分组去打标签,设置意向客户/成交客户/待跟进客户等,合理管理微信人群,方便后期有目的性的跟进. 02 ...

  • 利用人工智能加速空间图像的处理【经济学人精讲】第312期

    文章导读 本文选自<经济学人>2019年6月22日文章.波兰一所实验室正在建造一颗模仿人类大脑.由神经网络控制的人工智能卫星.该卫星可以在太空信息传回地球之前,对信息进行处理,使得传回的信 ...

  • 铺专家教你如何利用微信建立客户关系?

    铺专家教你如何利用微信建立客户关系? 随着客户越来越难跟进,利用微信建立客户关系 ,成为一种非常有效的方法!以下37条,希望对各位有用. 这些小技巧都是实用型的,学会了定会让你事半功倍. 1.微信里面 ...

  • Windows下利用IIS建立网站并实现局域网共享

    https://blog.csdn.net/qq_41485414/article/details/82754252 https://www.cnblogs.com/linuxprobe-sarah/ ...

  • 校园将开展心理体检,精神科医生如何利用契机建立“治疗联盟”?

    点击可浏览,欢迎关注视频号"晴日心身" 很多精神科医生由于工作繁忙,接诊学生群体只有5-10分钟的交流时间,然后作出抑郁症.双相障碍等诊断.这令很多父母.患者难以接受,甚至对精神科 ...