为什么它告诉False,OpenCV python cv2

kuuvgm7e  于 2023-10-24  发布在  Python
关注(0)|答案(2)|浏览(140)

我一直在做一个关于显微镜的项目,我正在开发一些函数当我试图将上像素和下像素颠倒过来的时候比如如果高度是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时,它是假的,我激活它,当它是假的,它是真的,但它总是假的

zqdjd7g9

zqdjd7g91#

问题是你在同一时间步中多次执行cv2.waitKey(1),你的代码工作,但只有当你垃圾邮件的关键,因为按键必须发生在相应的条件之前,在每个时间步,更多的条件/情况下,你有按键的可能性就越小,它将是精确匹配。
你必须将命令存储在一个变量中,这样你就可以在每个时间步监听一次按键,然后在你的条件中使用存储的值,如下所示:

command = cv2.waitKey(1)

    if command == ord('i'):
       ...

这样应该更好

tkclm6bt

tkclm6bt2#

为什么它告诉假,
这个问题是可以解决的
解决方案是使用waitkey(0)而不是waitkey(1)
片段:

# Invert Image Colors
    key = cv2.waitKey(0)
    if key == ord('i'):
        if not F1:
            F1 = True
        if F1:
            F1 = False
        print(True)

    # Invert y pixels
    if key == ord('g'): # <------- HERE
        if not F2:
            F2 = True
        elif F2:
            F2 = False
        print(F2)

    #Quit
    if key == ord('q'):
        break

输出量:

Choose which camera to use (Number) > 0
Choose width (Max 1500) > 900
Choose height (Max 900) > 640
True    # this image is 90 degree ('i')
True    # this image turned upside('g')

相关问题