我想一帧一帧地播放一部电影,并使用Trackbars
对这一帧进行一些形态学操作。在创建相应的structuringselement之前,我需要指定它的特性,比如 * 长度、度 * 和 * 迭代次数 *
我的代码:
import cv2
video = cv2.VideoCapture('arsenal_spurs.mp4')
cv2.namedWindow('Trackbar strel')
def morphology_operations(val):
length = cv2.getTrackbarPos('length', 'Trackbar strel')
degrees = cv2.getTrackbarPos('degrees', 'Trackbar strel')
iter_num = cv2.getTrackbarPos('iterations', 'Trackbar strel')
print(length, degrees, iter_num)
return length, degrees, iter_num
cv2.createTrackbar('Length', 'Trackbar strel', 1, 50, morphology_operations)
cv2.createTrackbar('Degrees', 'Trackbar strel', 10, 180, morphology_operations)
cv2.createTrackbar('Iterations', 'Trackbar strel', 1, 10, morphology_operations)
while True:
ret, frame = video.read()
if ret:
morphology_operations(0)
cv2.imshow('frame', frame)
# keys to move through the frames
key = cv2.waitKey(1)
while key not in [ord('q'), ord('>')]:
key = cv2.waitKey(0)
if key == ord('q'):
break
else:
break
video.release()
cv2.destroyAllWindows()
字符串
当我运行代码时,我得到Trackbars
和frame
。但是,这三个变量的值始终为-1
。另外,当我将Trackbars
拖动到不同的值时,我会得到-1
作为输出。
我做错什么了?谢啦,谢啦
的数据
2条答案
按热度按时间mdfafbf11#
我知道我有点晚了,但createTrackbar和getTrackbarPos的拼写必须完全相同,否则您将获得值-1作为输出,并且您的caplitalization不同
r6l8ljro2#
我重新阅读了OpenCV上的文档-您使用的
getTrackbarPos
是正确的。但我也注意到了OpenCV的Trackbar
在Python中的问题。在我以前的项目中,我用以下技术克服了这些麻烦:每个轨迹条1个函数,该函数在createTrackbar
中声明为lambda。在您的情况下,它可以是:字符串
等等。很可能,这是一个次优的解决方案,但你可以把它作为一个起点。