Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does Python cv2 modules depend on (old) cv

Tags:

python

opencv

I'm new to OpenCV and would like to use its Python binding.

When trying out the samples on OSX, I noticed

1.) The windows imshow creates are not resizable

2.) I can fix that with an prior call to cv2.namedWindow, like: cv2.namedWindow('zoom', cv2.cv.CV_WINDOW_NORMAL)

Can we add symbols like CV_WINDOW_NORMAL from cv into cv2 !? Who has commit rights to openCV's Python binding ?

Thanks, Sebastian Haase

like image 660
sebhaase Avatar asked Feb 10 '12 10:02

sebhaase


1 Answers

There are some omisions in the current new cv2 lib. Typically these are constants that did not get migrated to cv2 yet and are still in cv only. Here is some code to help you find them:

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 is a more faithful wrapper around the C++ libs than the previous cv. I found it confusing at first but it is much easier once you make the change. The code is much easier to read and numpy matrix manipulations are very fast.

I suggest you find and use the cv constants while reporting their omissions as bugs to the opencv bug tracker at willowgarage. cv2 is fresh and minty but will improve.

FYI. it is well worth instantiating the named windows before use, also killing them on exit. IMHO

E.g.

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()
like image 194
Neon22 Avatar answered Sep 22 '22 20:09

Neon22