【OpenCV入门学习--python】使用cv::createTrackbar添加一个轨迹栏Trackbar

例子源于OpenCV官网–添加轨迹栏到图像融合的程序中(https://docs.opencv.org/4.x/da/d6a/tutorial_trackbar.html)
在OpenCV窗口中使用cv::createTrackbar添加一个Trackbar,使程序从轨迹栏中获取输入信息。

代码:

from __future__ import print_function
from __future__ import division
import cv2 as cv
import argparse
alpha_slider_max = 100
title_window = 'Linear Blend'


#最后,我们必须使用Java中的匿名内部类监听器,
#为c++和Python代码定义回调函数on_trackbar
def on_trackbar(val):
    alpha = val / alpha_slider_max
    beta = ( 1.0 - alpha )
    dst = cv.addWeighted(src1, alpha, src2, beta, 0.0)
    cv.imshow(title_window, dst)
    
parser = argparse.ArgumentParser(description='Code for Adding a Trackbar to our applications tutorial.')
parser.add_argument('--input1', help='Path to the first input image.', default='LinuxLogo.png')
parser.add_argument('--input2', help='Path to the second input image.', default='WindowsLogo1.png')
args = parser.parse_args()


#首先加载两个将被混合的图像
src1 = cv.imread(cv.samples.findFile(args.input1))
src2 = cv.imread(cv.samples.findFile(args.input2))

if src1 is None:
    print('Could not open or find the image: ', args.input1)
    exit(0)
if src2 is None:
    print('Could not open or find the image: ', args.input2)
    exit(0)
    
#要创建轨迹条,首先我们必须创建它将被定位的窗口   
cv.namedWindow(title_window)

#现在我们可以创建Trackbar:
trackbar_name = 'Alpha x %d' % alpha_slider_max
cv.createTrackbar(trackbar_name, title_window , 0, alpha_slider_max, on_trackbar)

# Show some stuff
on_trackbar(0)
# Wait until user press some key
cv.waitKey()

遇到的问题:

报错:

Traceback (most recent call last):
  File "test072602.py", line 28, in <module>
    on_trackbar(0)
  File "test072602.py", line 10, in on_trackbar
    dst = cv.addWeighted(src1, alpha, src2, beta, 0.0)
cv2.error: OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv\modules\core\src\arithm.cpp:650: error: (-209:Sizes of input arguments do not match) The operation is neither 'array op array' (where arrays have the same size and the same number of channels), nor 'array op scalar', nor 'scalar op array' in function 'cv::arithm_op'

在这里插入图片描述

报错原因分析:

报错位置是dst = cv.addWeighted(src1, alpha, src2, beta, 0.0)
改行代码的图像加载出问题,排除中文路径的错误后,明确融合cv2.addWeighted权重加法函数语法:addWeighted(src1, alpha, src2, beta, gamma, dst=None, dtype=None)
其中src1, src2是需要融合相加的两副大小和通道数相等的图像。而我的两个原图像是大小不同的。

解决方法:

将程序用到的两个待融合的图像剪切成相同大小。

运行结果:

WindowsLogo1.png:
在这里插入图片描述

LinuxLogo.png:在这里插入图片描述

融合后:
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值