OpenCV-Python基础教程3-图像基本操作(访问像素点/ROI/通道分离)

Posted 墨麟非攻

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV-Python基础教程3-图像基本操作(访问像素点/ROI/通道分离)相关的知识,希望对你有一定的参考价值。

一、获取和修改像素点的值

import cv2
img = cv2.imread(\'lena.jpg\')
# 100, 90表示行列坐标
px = img[100, 90]
print(px)

# 获取一个坐标单通道的值
# 0:蓝色(B)
# 1:绿色(G)
# 2:红色(R)
px_blue = img[100, 90, 0]

px_green = img[100, 90, 1]
px_red = img[100, 90, 2]
print(px_blue)
print(px_green)
print(px_red)
[103  98 197]
103
98
197

通过行、列坐标获取某个像素点的值,对于彩色图。B、G、R对应0, 1, 2

修改像素也是同样的方式:

# 修改像素的值
img[100, 90] = [255, 255, 255]
print(img[100, 90])
[255 255 255]
注意:该操作只是内存中的img像素点变了,因为没有保存,所以原图并没有修改

更好的像素访问和编辑方法:

img.item(100, 90, 0)
103
# 修改蓝色通道的值
img.itemset((100, 90, 0), 50)
img.item(100, 90, 0)
50

二、图片属性

1、图像形状

print(img.shape)
# 形状中包括行数,列数和通道数
height, width, channels = img.shape
# img是灰度图,height, width = img.shape
(263, 247, 3)

2、数据类型

print(img.dtype)
uint8

3、图像总像素数

print(img.size) # 263 * 247 * 3 = 194883
194883

二、感兴趣区域(ROI)

# 截取脸部ROI
face = img[100:200, 115:188]
cv2.imshow(\'face\', face)
cv2.waitKey(0)

行对应y,列对应x,所以其实是img[y, x],所以要注意,不要弄混淆

三、通道分割与合并

b, g, r = cv2.split(img)
img = cv2.merge((b, g, r))

分割:cv2.split()    合并:cv.merge()

split()函数比较耗时,更高效的方式是用numpy中的索引,提取B通道:

b = img[:, :, 0]
cv2.imshow(\'blue\', b)
cv2.waitKey(0)

由于是单通道图,所以呈现出来的是一种灰度图。

 参考网址:https://tianchi.aliyun.com/course/courseConsole?courseId=40992&chapterIndex=1&sectionIndex=4

 



以上是关于OpenCV-Python基础教程3-图像基本操作(访问像素点/ROI/通道分离)的主要内容,如果未能解决你的问题,请参考以下文章

opencv-python 图像基础处理

OpenCV-Python基础教程2-PyQt编写GUI界面

OpenCV-Python 第三章

304页的《OpenCV-Python 中文教程》(附电子书下载)

OpenCV-Python教程:形态学变换~腐蚀和膨胀(erode,dilate)

以代码为基础的opencv-python学习 图像模糊