我一直在做一个关于显微镜的项目,我正在开发一些函数当我试图将上像素和下像素颠倒过来的时候比如如果高度是1000 y值为50的像素会和y值为950的像素互换位置,所以对于这个函数我做了所以我给给予代码rn
# import the opencv library
import cv2
import tkinter as tk
import time
a = int(input("Choose which camera to use (Number) > "))
# define a video capture object
vid = cv2.VideoCapture(a)
width, height = int(input("Choose width (Max 1500) > ")), int(input("Choose height (Max 900) > "))
F1 = False
F2 = False
while True:
# Capture the video frame
liste = []
liste2 = {"[0, 0, 0]": 0}
maximum = []
maxxx = ""
ret, frame = vid.read()
frame = cv2.resize(frame, (width, height))
if F1:
h, w, c = frame.shape
for t in range(h):
for y in range(w):
for u in range(3):
frame[t][y][u] = 255 - frame[t][y][u]
if F2: <--------------------------------- HERE
frame = frame[::-1]
# Display the resulting frame
cv2.imshow('Video', frame)
maxx = 0
# Get the color that is the most on the screen
if cv2.waitKey(1) & 0xFF == ord('r'):
for a in range(width):
for b in range(height):
liste.append(str(frame[a, b]))
for i in liste:
if i in liste2:
liste2[i] += 1
elif not i in liste2:
liste2.update({i: 1})
for i in liste:
if maxx < liste2[i]:
maxx = liste2[i]
for i in liste:
if maxx == liste2[i] and not maxx in maximum:
maxxx = i
print(maxxx)
# Invert Image Colors
if cv2.waitKey(1) & 0xFF == ord('i'):
if not F1:
F1 = True
if F1:
F1 = False
print(True)
# Invert y pixels
if cv2.waitKey(1) & 0xFF == ord('g'): # <------- HERE
if not F2:
F2 = True
elif F2:
F2 = False
print(F2)
#Quit
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# After the loop release the cap object
vid.release()
# Destroy all the windows
cv2.destroyAllWindows()
所以,因为有一种游戏循环,所以当我按下g键时,我试图从反转切换到不反转,但当我这样做时,F2值(第一个布尔值<--这里)总是告诉我假。
我只是告诉它,但我试图使一个布尔值为True时,它是假的,我激活它,当它是假的,它是真的,但它总是假的
2条答案
按热度按时间zqdjd7g91#
问题是你在同一时间步中多次执行
cv2.waitKey(1)
,你的代码工作,但只有当你垃圾邮件的关键,因为按键必须发生在相应的条件之前,在每个时间步,更多的条件/情况下,你有按键的可能性就越小,它将是精确匹配。你必须将命令存储在一个变量中,这样你就可以在每个时间步监听一次按键,然后在你的条件中使用存储的值,如下所示:
这样应该更好
tkclm6bt2#
为什么它告诉假,
这个问题是可以解决的
解决方案是使用
waitkey(0)
而不是waitkey(1)
。片段:
输出量: