Basic Operations on Images

摘自https://docs.opencv.org/4.2.0/d3/df2/tutorial_py_basic_ops.html

Almost all the operations in this section are mainly related to Numpy rather than OpenCV.

Accessing and Modifying pixel values

You can access a pixel value by its row and column coordinates. For BGR image, it returns an array of Blue, Green, Red values. For grayscale image, just corresponding intensity is returned.

>>> px = img[100,100]
>>> print( px )
[157 166 200]
# accessing only blue pixel
>>> blue = img[100,100,0]
>>> print( blue )
157

#modify the pixel values
>>> img[100,100] = [255,255,255]

The above method is normally used for selecting a region of an array, say the first 5 rows and last 3 columns.

For individual pixel access, the Numpy array methods, array.item() and array.itemset() are considered better. They always return a scalar, however, so if you want to access all the B,G,R values, you will need to call array.item() separately for each value.

# accessing RED value
>>> img.item(10,10,2)
59
# modifying RED value
>>> img.itemset((10,10,2),100)
>>> img.item(10,10,2)
100

Accessing Image Properties

Image properties include number of rows, columns, and channels; type of image data; number of pixels; etc.

>>> print( img.shape )
(342, 548, 3)

#Total number of pixels is accessed by img.size:
>>> print( img.size )
562248

>>> print( img.dtype )
uint8

Image ROI

Sometimes, you will have to play with certain regions of images. 

ROI is again obtained using Numpy indexing. 

>>> ball = img[280:340, 330:390]
>>> img[273:333, 100:160] = ball

Splitting and Merging Image Channels

Sometimes you will need to work separately on the B,G,R channels of an image. In this case, you need to split the BGR image into single channels. In other cases, you may need to join these individual channels to create a BGR image. 

>>> b,g,r = cv.split(img)
>>> img = cv.merge((b,g,r))

>>> b = img[:,:,0]

#set all the red pixels to zero
>>> img[:,:,2] = 0

cv.split() is a costly operation (in terms of time). So use it only if necessary. Otherwise go for Numpy indexing.

猜你喜欢

转载自blog.csdn.net/Airfrozen/article/details/104425341