栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

opencv

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

opencv

一、拉动进度条实现两幅图片融合:

       主要函数:cv2.createTrackbar()相关参数

       int createTrackbar(const string& trackbarname, const string&winname, int* value,  int count ,TrackbarCallback onChange = 0,  void* userdata = 0); 

       const string& trackbarname:进度条名称

       const string&winname:用于放置进度条的画布

       int* value:进度条的起始值,进度条最左端一定是0,起始值则可自行设定。

       int count:进度条的最大值。

       TrackbarCallback onChange = 0:回调函数,默认为0,虽然默认为0,但一般设定一个空函数:def nothing(): pass

       void* userdata = 0:用户传给回调函数的数据值,默认值为0。(这个参数暂时没研究,不会)

(‘进度条名称’,'放置进度条的画布',进度条起始位置,进度条最大值,回调函数,用户传给回调函数的数据值)     

       cv2.addWeighted()相关参数:

       dst = cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])

      src1:第一张图片;

      alpha:第一张图的权重;

       src2:第二张图片;(两张图片的分辨率需一致,如不一致需要转换,此外被叠加的两幅图像必须是尺寸相同、类型相同的)

       beta:第二张图片的权重(alpha+beta=1)

       后两个参数还未研究,这里暂时可不用到。 

以下代码实现移动进度条实现一个图片平滑切换到另一个图片。

import cv2
import numpy as np
import time

def nothing(x):

    pass

img_before = cv2.imread(r'D:pythonpythoninstallation packaget0118c62a58ab2a87a9.jpg')

img_after = cv2.imread(r'D:pythonpythoninstallation packaget01866b35b22c82b3ac.jpg')

#读取两副图片数据

cv2.namedWindow('img_for_show')

#创建用于放置进度条的画布。

cv2.createTrackbar('weight','img_for_show',0,10,nothing)

#创建进度条,进度条默认间隔为1,还不会设定进度条刻度值,故这里设定最小值为0,最大值为10.

while(1):    

    count = cv2.getTrackbarPos('weight','img_for_show')/10

    #循环获取进度条值,除于10将count值限定为0~1之间用作图片权重值。

    img_for_show = cv2.addWeighted(img_before,count,img_after,1-count,0)

    cv2.imshow('img_for_show',img_for_show)

    k = cv2.waitKey(1)

    if k == 27:

        break

cv2.destroyAllWindows()

效果如下图:

 二、以下代码运行后自动由第一张图以0.2秒的速度缓慢切换成第二幅图。

import cv2
import numpy as np
import time

img_before = cv2.imread(r'D:pythonpythoninstallation packaget0118c62a58ab2a87a9.jpg')

img_after = cv2.imread(r'D:pythonpythoninstallation packaget01866b35b22c82b3ac.jpg')

#读取两幅原图数据

rows,cols,_ = img_before.shape

img = np.zeros((rows,cols),np.uint8)

#这里创建一个和上述图片相同大小的纯黑图片,相当于创建一个空图片。

cv2.namedWindow('show')

count = 0 #创建一个计数变量,用于计算权重。

while(1):

    if count == 0: #判断是否刚开始计数,如是,则显示第一幅图

        cv2.imshow('show',img_after)

    else: #如不等于0,则加载融合后的图片。(这里如不用判断语句,则最开始会以一幅纯黑图片再切换到第一幅图,这不是我们想要的结果,故加个判断语句。)

        cv2.imshow('show',img)

    k = cv2.waitKey(1)&0xFF

    if k == ord('q') or count >= 1:

        break

    count += 0.1

    img = cv2.addWeighted(img_before,count,img_after,1-count,0)

    time.sleep(0.2)

cv2.waitKey()

cv2.destroyAllWindows()

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/994712.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号