opencv图像的基本操作3

1、获取像素并修改

读取一副图像,根据像素的行和列的坐标获取它的像素值,对于RGB图像而言,返回RGB的值,对于灰度图则返回灰度值

 1 import cv2
 2 import numpy
 3 img = cv2.imread('1.jpg')
 4 px = img[100, 100]
 5 print(px) #获取图像的(100,100)的3维矩阵
 6 Blue = img[100, 100, 0]
 7 Gray = img[100, 100, 1]
 8 Red = img[100, 100, 2]
 9 print(Blue, Gray, Red)#打印三色图的灰度值,默认BGR
10 for i in img[100, 100]:# 遍历矩阵
11     print(i)
12 
13 print(img.item(100, 100, 2))#快速获取矩阵值
14 img.itemset((100, 100, 2), 99)#快速修改矩阵值

执行结果:

[254 148 125]
254 148 125
254
148
125
125

 2、获取图像的属性

 图像属性包括:行,列,通道,图像数据类型,像素数目等

2.1 img.shape可以获得图像的形状,返回值是一个包含行数,列数,通道数的元组

如果图像是灰度图,返回值仅有行数和列数,所以通过检查返回值可以判断是灰度图还是彩色图

1 port cv2
2 import numpy
3 img = cv2.imread('1.jpg')
4 print(img.shape)
5 img1 = cv2.imread('1.jpg', 0)
6 print(img1.shape)

 执行结果:

(375, 500, 3)
(375, 500)

2.2 img.size可以返回图像的像素数目 

1 print(img.size)#img.size可以返回图像的像素数目
2 执行结果:562500

 2.3 img.dtype返回图像的数据类型,在debug时很重要,因为OpenCV-Python代码中经常出现数据类型的不一致

1 print(img.dtype)
2 结果:
3 unit8

 3.图像ROI对图像的特定区域操作。ROI是使用numpy索引来获得的。

   简单的说就是对图像感兴趣的区域,机器视觉、图像处理中,从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域ROI。举个例子来说:有一副图片,图片上有各种动物,但是你只喜欢图片里的狗,那么这个狗所在的区域就是感兴趣的区域(ROI)。

扫描二维码关注公众号,回复: 7258589 查看本文章

 (1) 矩形ROI,直接使用切片,简单粗暴

1 import cv2
2 
3 img = cv2.imread("1.jpg")
4 roi = img[50:120, 50:100]# 前面高度截取,后面横向截取
5 cv2.imshow('roi', roi)
6 cv2.waitKey(0)
7 cv2.destroyAllWindows()

 (2)一些常用函数选取感兴趣的区域

numpy.zeros() 用法参看:https://www.runoob.com/numpy/numpy-array-creation.html

1

猜你喜欢

转载自www.cnblogs.com/weststar/p/11506300.html