Ask Your Question
1

Python and OpenCV 2.4.3

asked 2012-11-14 09:55:54 -0500

domagoj gravatar image domagoj
11 1 3

updated 2012-11-14 09:57:28 -0500

Few days ago I went into searching for a good way to make a simple computer vision system. OpenCV library is something I need but it proved hard to learn with Python especially after OpenCV 2.4.3 update which have very slim Python related documentation. So I now understand that there was a bunch of changes in OpenCV, for exaxmple

import cv

is now

import cv2

And there is bunch of modules that is missing. I mean, yes there are examples of the new python-opencv syntax but it's very narrow and proven to be hard to understand. For example: Example in official documentation for Python code

cv2.cvtColor(src, code[, dst[, dstCn]])

I know what this code means and how to use it, at least I think i know. But writing source and color code does nothing just give me :

    Traceback (most recent call last):
  File "C:\FILEFOLDER\tut.py", line 11, in <module>
    cv.cvtColor('proba.jpg', 'CV_RGB2GRAY')
TypeError: an integer is required

Or if i try to write code like variable:

Traceback (most recent call last):
  File "C:\FILEFOLDER\tut.py", line 11, in <module>
    cv.cvtColor('proba.jpg', CV_RGB2GRAY)
NameError: name 'CV_RGB2GRAY' is not defined

So is there any Python related reference document/tutorial/book/guide for newest OpenCV with the ground up explanations that does not confuse newbie like me with unwanted code examples for C++ or Java?

delete close flag offensive retag edit

2 Answers

Sort by ยป oldest newest most voted
2

answered 2012-11-17 14:25:04 -0500

Dan Maynard gravatar image Dan Maynard
21 1

Python documentation is a little patchy, but in my opinion worth persisting with. Sometimes the C++ description is very helpful as it says the type of array required.

The main problem with your code examples is that OpenCV Python functions which process images take as input Numpy arrays. This means you have to read the image from .jpg into an array, and then pass it to the function. The result from cvtColor is another Numpy array.

Example:

import numpy as np
import cv2
im=cv2.imread('c:/temp/i1.jpg',cv2.cv.CV_LOAD_IMAGE_COLOR)
type(im)  #Shows Numpy array
im.shape #Numpy array object shape gives image size
cv2.imshow('Colour',im)
im_gray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
cv2.imshow('Gray',im_gray)  #show image on screen
cv2.imwrite('c:/temp/i1g.jpg',im_gray)  #write to file
im_gray[...]=0  #Use Numpy broadcasting
cv2.imshow('Turned black',im_gray)

If you unpack the OpenCV source there is a directory of samples called opencv\samples\python2 These are all using the cv2 interface.

link delete flag offensive edit
0

answered 2012-11-15 21:34:26 -0500

worst guy ever gravatar image worst guy ever
31 3

I sympathise with your confusion at the state of the official documentation, but your example is an issue with your Python syntax, not with OpenCV or its documentation. Importing like so:

import cv

will not add symbols in the cv module to the local namespace. You can either reference the cv module every time you want to use a symbol from it (e.g.: cv.cvtColor and cv.CV_RGB2GRAY) or import the symbols you need into the local namespace (e.g.: from cv import cvtColor, CV_RGB2GRAY) or just import everything: from cv import *.

I don't know of any better source of documentation, sorry.

link delete flag offensive edit

Login/Signup to Answer

Question tools

Follow

subscribe to rss feed

Stats

Asked: 2012-11-14 09:55:54 -0500

Seen: 2,806 times

Last updated: Nov 17 '12