opencv3.4+python3.6 中文教程6之像素操作

目标
像素颜色值的获取及变更
图像特征
RIO兴趣区域
分割与融合
像素获取及变更

import numpy as np
import cv2 as cv
img = cv.imread(‘sample.jpg’) #读入图片
px = img[100,100] #坐标位置像素点的颜色
print( px )
[157 166 200] #opencv中通道顺序为BGR
blue = img[100,100,0] #只读取“B”(blue)通道的数值
print( blue )
157
同样的方法可以实现坐标点像素值的改变:
img[100,100] = [255,255,255]
print( img[100,100] )
[255 255 255]
上述方法直接访问图像点阵中的像素值,速度会非常的慢,并不是推荐的最优方法,通常会用array.item方法来实现同样的功能。
# 得到像素值
img.item(10,10,2)
59
# 改变像素值
img.itemset((10,10,2),100)
img.item(10,10,2)
100
图像大小
print( img.shape )
(342, 548, 3)
如果图片为彩色图片,img.shape返回(h,w,channel)
我们通常会用:h,w=img.shape[::2]来得到图片的尺寸大小。
如果图片为灰度图,则只返回h,w。这也是判别图片是否为彩色图片的一个方法。
像素总数量
print( img.size )
562248
图像类型
print( img.dtype )
uint8
RIO兴趣区域
ball = img[280:340, 330:390] #获取[row1:row2,col1:col2]区域内的图像
img[273:333, 100:160] = ball #给[row1:row2,col1:col2]区域内的图像重新赋值
效果如下:
opencv3.4+python3.6 中文教程6之像素操作_第1张图片

像素通道分割与融合

b,g,r = cv.split(img) #将各通道颜色分割开来
img = cv.merge((b,g,r)) #融合为一个新的图像
或者:
b = img[:,:,0] #单独得到b通道数值
img[:,:,2] = 0 #将red通道颜色全部置为0
cv.split函数非常耗时,除非必用不可。请尽量使用numpy函数来实现功能。

你可能感兴趣的:(机器视觉算法与应用,python3.6,opencv3.3,python,opencv)