为什么Python cv2模块依赖于(old) cv?

5 投票
1 回答
6457 浏览
提问于 2025-04-17 12:45

我刚接触OpenCV,想用它的Python接口。

在Mac上试用示例时,我发现了以下几点:

1.) imshow创建的窗口不能调整大小。

2.) 我可以通过先调用cv2.namedWindow来解决这个问题,比如这样: cv2.namedWindow('zoom', cv2.cv.CV_WINDOW_NORMAL)

我们能不能把像CV_WINDOW_NORMAL这样的符号从cv加到cv2里呢!?

谁有权限去修改OpenCV的Python接口?

谢谢,

Sebastian Haase

1 个回答

9

现在的新cv2库里有一些遗漏的东西。通常这些是一些常量,它们还没有被迁移到cv2,仍然在旧的cv库里。

这里有一些代码可以帮助你找到这些遗漏的常量:

import cv2
import cv2.cv as cv
nms  = [(n.lower(), n) for n in dir(cv)] # list of everything in the cv module
nms2 = [(n.lower(), n) for n in dir(cv2)] # list of everything in the cv2 module

search = 'window'

print "in cv2\n ",[m[1] for m in nms2 if m[0].find(search.lower())>-1]
print "in cv\n ",[m[1] for m in nms if m[0].find(search.lower())>-1]

cv2比之前的cv库更贴近C++库。一开始我觉得有点困惑,但一旦你适应了,就会发现使用起来简单多了。代码也更容易阅读,使用numpy进行矩阵操作的速度非常快。

我建议你在使用cv常量的同时,把这些遗漏的地方报告给opencv的bug追踪系统,这样可以帮助改进cv2。虽然cv2是新的,但它会不断完善。

顺便说一下,使用命名窗口之前先实例化它们是很有必要的,退出时也要关闭它们。这是我的个人看法。

例如:

import cv2
if __name__ == '__main__': 
    cap = cv2.VideoCapture(0) # webcam 0
    cv2.namedWindow("input")
    cv2.namedWindow("grey")
    key = -1
    while(key < 0):
        success, img = cap.read()
        cv2.imshow("input", img)
        grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        cv2.imshow("grey", grey)
        key = cv2.waitKey(1)
    cv2.destroyAllWindows()

撰写回答