【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'

【OpenCV入门学习--python】使用cv::createTrackbar添加一个轨迹栏Trackbar_第1张图片

报错原因分析:

报错位置是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:
【OpenCV入门学习--python】使用cv::createTrackbar添加一个轨迹栏Trackbar_第2张图片

LinuxLogo.png:【OpenCV入门学习--python】使用cv::createTrackbar添加一个轨迹栏Trackbar_第3张图片

融合后:
【OpenCV入门学习--python】使用cv::createTrackbar添加一个轨迹栏Trackbar_第4张图片

【OpenCV入门学习--python】使用cv::createTrackbar添加一个轨迹栏Trackbar_第5张图片

你可能感兴趣的:(OpenCV,opencv,python,学习)