【问题标题】:WaitKey requires me to keep pressing and I want to just press it onceWaitKey 要求我一直按,我只想按一次
【发布时间】:2019-06-21 00:53:42
【问题描述】:

我正在运行一些名为 bcf.py 的代码,它非常长且令人费解,但简而言之,它从一组文件夹中的每个图像中提取 300 个特征点。所以可能会有数百张图像。

当我运行脚本时,一切正常,除了我必须一直按返回按钮以提取所有特征点并为每张图像重复按此按钮,这令人沮丧。

为什么会这样,我该如何解决?目标是按一次等待键并提取特征。

谢谢

我不知道这叫什么才能搜索答案。

def _svm_classify_test(self):
    clf = self._load_classifier()
    label_to_cls = self._load_label_to_class_mapping()
    testing_data = []
    labels = []
    for (cls, idx) in self.data.keys():
        testing_data.append(self.data[(cls, idx)]['spp_descriptor'])
        labels.append(hash(cls))
    predictions = clf.predict(testing_data)
    correct = 0
    for (i, label) in enumerate(labels):
        if predictions[i] == label:
            correct += 1
        else:
            print("Mistook %s for %s" % (label_to_cls[label], label_to_cls[predictions[i]]))
    print("Correct: %s out of %s (Accuracy: %.2f%%)" % (correct, len(predictions), 100. * correct / len(predictions)))

def show(self, image):
    cv2.imshow('image', image)
    _ = cv2.waitKey()

目标是按一次等待键,自动遍历所有图像并提取特征。

【问题讨论】:

    标签: python macos opencv key wait


    【解决方案1】:

    documentation 中解释的函数cv.waitKey([, delay]),它可能采用一个您可以认为是超时的值。这意味着,您可以传递一个 10,它会阻止该函数 10 毫秒以进行键盘输入。

    对于您的情况,我看不到您在代码中的何处使用您的函数show,所以我无法确切知道您应该如何做到这一点,但作为一个伪代码,您可以了解一下,它会是这样的:

    filenames = [] #lets assume your filenames are here
    for f in filenames:
      img = cv2.imread(f)
      cv2.imshow("image", img)
      cv2.waitKey(10)
    

    如果您想在开始时暂停,您可以在循环外执行 imshow 并在其后添加 0 的 waitkey。此外,您可以播放时间量,例如 5000 以在继续之前显示 5 秒。

    但是如果处理时间太长,您可以考虑将 imshow 部分放入线程中,因为窗口可能在 waitKey 之后等待特征提取过程完成时无响应。此外,添加“q”之类的东西来退出应用程序或其他东西可能会很好......这些只是一些建议:)

    【讨论】:

    • 谢谢。我会试一试的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 2012-06-26
    相关资源
    最近更新 更多