1、将图片灰度化,以及像素操作(将3通道的RGB图像,灰度化为单通道的灰度图像):
import cv2
import numpy as np
import matplotlib.pyplot as plt
img=cv2.imread('las.jpg') #读取图像,保存为矩阵形式
#cv2.imshow("RGB",img) #RGB为窗口名
print(img.shape) #shape,可以获取图片的属性
#cv2.waitKey(0)
width=img.shape[1] #列数,即宽度
height=img.shape[0] #行数,即高度
'''
0-----------------------------> x
|
|
|
|
|
|
y
'''
#必须将数组元素限定在uint8内,RGB图像的灰度级一般为256
news=np.zeros((height,width),np.uint8()) #uint8,2^8,取值为0-255
for h in range(height):
for w in range(width):
gray=0.3*img[h,w][0]+0.59*img[h,w][1]+0.11*img[h,w][2] #opencv读取图片,以BGR的形式存储
news[h,w]=np.uint8(gray)
#cv2.imshow('gray',news)
cv2.imwrite('the gray one.jpg',news)
#将图片的某一区域的像素全部变成白色(255)
img[0:100,0:100,0:3]=[255,255,255] #不加0:3也行(左闭右开)
cv2.imshow('the white zone',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
'''
plt.hist(img.ravel(),256)
plt.show()
'''
另外一种灰度化的方法,使用库函数cv2.COLOR_BGR2GRAY:
import cv2
import numpy as np
#使用cv2.COLOR_BGR2GRAY将图片灰度化(同样的,结果的图片也是单通道的)
img=cv2.imread('las.jpg')
img1=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('1',img1)
a=img1[50,50]
print(a) #a的值只有一个,说明使用cv2.COLOR_BGR2GRAY转换出来的图是单通道的
2、提取出感兴趣区域(简单的提取):
import cv2
import numpy as np
img1=cv2.imread('the gray one.jpg')
print(img1.size) #像素个数
print(img1.shape) #维度
print(img1.dtype) #图像类型,uint8
in_area=np.ones((100,100,3),np.uint8()) #zeros也可以
#print(help(np.ones)) #通过这个方式可以查看某个函数的官方文档解释
in_area=img1[300:400,300:400]
cv2.imshow('ins',in_area) #提取出感兴趣区域
img1[0:100,0:100] = in_area
cv2.imshow('ronghe',img1) #与原图进行融合
import cv2
import numpy as np
#opencv读取RGB图片,用BGR的格式存储
img=cv2.imread('las.jpg')
cv2.imshow('test1',img)
b,g,r=cv2.split(img)
img1=cv2.merge([r,g,b]) #merge最多两个参数
cv2.imshow('test2',img1)
import cv2
import numpy as np
img=cv2.imread('las.jpg')
c,k,h=img.shape
b,g,r = cv2.split(img)
cv2.imshow('b',b)
img1=np.zeros((c,k,h),np.uint8())
img1[:,:,0]=b
cv2.imshow('bule',img1)