我想一帧一帧地展示一部电影,并使用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
作为输出
我做错什么了?谢谢
我在OpenCV上重新读取了文档-您使用
getTrackbarPos
是正确的。但是我也注意到了Python中OpenCV的Trackbar
的问题。在我以前的项目中,我通过以下技术克服了这些问题:每个trackbar有一个函数,这个函数在createTrackbar
中声明为lambda。在您的情况下,它可以是:等等。很可能,这是一个次优的解决方案,但你可以用它作为一个起点
相关问题 更多 >
编程相关推荐