CWYAlpha

Just another WordPress.com site

Thought this was cool: Difference between Matrix Arithmetic in OpenCV and Numpy

leave a comment »


Hi,
This is a small post to show you an important difference in arithmetic operations in OpenCV and Numpy.
As an example,  I take addition as operation.
As you know, images are loaded in OpenCV as “uint8” data. ie 8 bit data. So all the values in the matrix (or image) lie between 0 and 255.
So, even if you add or subtract two numbers, result lies between 0 and 255.
For eg,      255+1 ≠ 256  for ‘uint8’ data
So what is the answer in above case?
There lies the difference between OpenCV and Numpy. I will demonstrate it using Python terminal.
First create two datas of uint8 type, x = 255, y = 1

>>> x = np.array([255],np.uint8)
>>> y = np.array([1],np.uint8)

OpenCV

Now we add x and y using OpenCV function, cv2.add

>>> cv2.add(x,y)
array([[255]], dtype=uint8)

ie 255+1 = 255 in OpenCV. It is because arithmetic operations in OpenCV are clipped or saturated operations. ie , they clip values wrt data type. If uint8, it clips all values 0 and 255. So if you add two gray pixels, a = 127 and b = 129, you get c = 255, a white pixel, which is OK and necessary in Image Processing

Numpy

Now we add x and y in Numpy.

>>> x+y
array([0], dtype=uint8)

ie 255+1 = 0 in Numpy. It is because Numpy performs a modulo-256 operation. So 256 % 256 = 0.

But what it implies in image processing? If you add a value of  ‘1’ to a white pixel, you get a pure black pixel, which is completely unfavorable in image processing. If you add a = 127 and b = 128, again you get a black pixel.

So better stick to OpenCV functions for image arithmetic operations.

Regards,
ARK

from OpenCV-Python: http://opencvpython.blogspot.com/2012/06/difference-between-matrix-arithmetic-in.html

Written by cwyalpha

六月 2, 2012 在 11:09 上午

发表在 Uncategorized

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: