Python OpenCVWaitKey简历正确地返回ubuntumodulo256映射的奇怪输出

2024-06-01 03:12:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我用opencv2.2运行ubuntu11.10(联想T400)(我相信导入是作为cv2.cv导入的)。如果我只是“导入cv”,这个问题也会发生。在

我最近开始有这个问题,这有点奇怪。我不知道我做了什么有意义的事,我已经重新开始了。我安装了几个程序,但我不认为这些会影响到这一点。在

当我用一个显示的人造图像(只有一个黑色图像)运行时,我会尝试投票WaitKey简历(10) 一。它吐回垃圾。在

以下是我的OpenCV代码:

import cv2.cv as cv
import time

cv.NamedWindow("camera", 1)
img = cv.CreateImage((400,400), 8, 3)
valkeys = range(1,255)
f = open('/home/andrew/webuploads/keyboardtest', 'wb')
while True:
    cv.ShowImage("camera", img)
    k = cv.WaitKey(10)
    if k is -1:
        pass
    else:
        print 'writing %s' %str(k)
        f.write((str(k)+' '))

f.close()

以下是我从程序中得到的输出:

1048678 1048676 1048673 1048691 1048676 1048678 1048689 1048695 1048677 1048688 1048687 1048681 1048677 1048677 1048695 1048624 1048633 1048633 1048633 1048624 1048695 1048677 1048690 1048624 1048633 1048681 1048681 1048681 1048681 1048688 1048687 1048677 1048687 1048677 1048681 1048681 1048681 1048687 1048681 1048681 1048681 1048681 1048681 1048681 1048687 1048687 1048585 10486871048681 1048688 1048687 1048681 1114085 1179728 1179727 1179721 1179728 1179721 1245153 1245289 1179721 1179721 1179721 1179721 1179721 1179721 1179721 1179721 1179721 1179721 1179721 1179721 1179727 11797181117971811179718111797281117972811179728111797281117972811179728111797211797211797271117972811179727179727111797271117972811179727 1179727 11797271179715 1179734 1179725 1179692 1179736 1179738 1179725 1179715 1179734 1179692 1245155 1441859

现在我可以对256个数字进行模运算,得到一些合理的结果(只是尝试一下,它正确地识别了我所有的密钥),但是,为什么我需要这样做呢?如果没有以前的工作,chr(k)会给我任何东西。有人有什么想法吗?在


Tags: 图像import程序img投票cv2cvcamera
2条回答

模数之所以有效,是因为有关密钥的信息存储在返回值的最后8位k & 255还将选取最后8位:

>>> k = 1048678
>>> chr(k & 255)
'f'

在Python中,chr(n)将返回对应于n的字符。不幸的是,OpenCV文档presents no information about this issue。在

由于当前Ubuntu 13.04的OpenCV包v2.4.2仍然存在此问题:

k % 256和{}都将映射-1,以及{}到{}。为了区分这两种情况,需要额外检查key < 0。在

如果减去0x100000,它将1048831映射到255,而{}映射到{},这意味着“no key”仍然映射到唯一的负值。在

k = cv2.waitKey(delay)
k -= 0x100000
if (k == 27):
    print("<Esc>")

相关问题 更多 >