opencv的图像操作

Posted Photoelectric

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv的图像操作相关的知识,希望对你有一定的参考价值。

 访问和修改像素值

OpenCV的图像是numpy.ndarray类型的多维数组,其中包含字节值

对于一个BGR图像,可以使用数组的方式去访问这些值,例如image[0,0,0]

第一个值表示y坐标(行),第二个值表示x坐标(列),第三个值表示颜色通道

 访问像素值

import cv2
import numpy as np

if __name__ == '__main__':
   img = cv2.imread('6.png')
   px = img[100,100]
   print(px) #返回[106 102 104]对应BRR
   grayimg = cv2.imread('gray.png')
   px = grayimg[100,100,0] #灰度值只显示亮度
   print(px)


 修改像素值

1
2
3
>>> img[100,100] = [255,255,255]
>>> print img[100,100]
[255 255 255]

PS:对于单个像素值访问和修改,更好的方法是使用array.item() 和 array.itemset()

1
2
3
img = cv2.imread('6.png')
print(img.item(100,100,0)) #访问100,100像素的blue值,若需要B,G,R的全部数据则需要分别调用img.item
img.itemset((100,100,0),100) #修改像素值

 访问图像属性

1
2
3
4
5
6
img = cv2.imread('6.png')
print(img.shape) #(883, 1572, 3)
grayimg = cv2.imread('6.png',0)
print(grayimg.shape) #(883, 1572) 灰度图只返回行数和列数
print(img.size) #4164228 总像素数
print(img.dtype) #uint8 图像数据类型

 选定范围

1
img[100:200, 100:500] #100行到200行,100列到500列的像素范围

 分割和合并图像通道

b,g,r = cv2.split(img) #需要时间很多,应尽可能使用Numpy进行索引
img = cv2.merge((b,g,r))
#or b = img[:,:,0]
img[:,:,2] = 0 #让所有红色像素等于0


 注,本篇为转载文章,原作者为Clicker

 原文链接   http://nonexistent.tech/2018/05/14/opencv的图像操作/

以上是关于opencv的图像操作的主要内容,如果未能解决你的问题,请参考以下文章

pyhton—opencv直线检测(HoughLines)找到最长的一条线

基于 OpenCV 实战:对象跟踪

OpenCV的核心操作 —— 图像的基本操作+图像上的算术运算

opencv学习笔记opencv加载图像修改图像显示图像保存图像以及代码举例

使用OpenCV对图像进行两种平移操作(图像的尺寸变化与图像的尺寸不变)

OpenCV实战——像素操作