二进制写尽天下事,计算机并不会像人那样直接去图像进行判断,看到美女和美食也不会心动,而机器视觉则帮助我们学习计算机是如何处理图像的。这次讲解讲解运用numpy数组操作图像。
遍历访问图像的像素并进行取反
import cv2 as cv
import numpy as np
def access_pixels(image): # 获取高heigt宽weiht通道channel
print(image.shape)
height = image.shape[0]
width = image.shape[1]
channels = image.shape[2]
# 也可以直接写成:
# height, width, channels = image.shape[:]
new_image = image.copy() # 复制image图片
for row in range(height):
for col in range(width):
for c in range(channels):
pv = image[row, col, c]
new_image[row, col, c] = 255 - pv#图像反转
cv.imshow('new_image',new_image)#显示图像
pic = cv.imread("1.jpg") # 读入图片放进src中
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE) # 创建窗口, 窗口尺寸自动调整
cv.imshow("input image", pic)
access_pixels(src) #千万别漏了。
cv.waitKey(0)
cv.destroyAllWindows()
可以看到白变黑黑变白了
其实以上方法可以调用一个api就可以代替
def inverse(image):
dst=cv.bitwise_not(image)
cv.imshow('inverse_demo',dst)
nverse(pic)#将access_pixels(pic)替换
也可以实现同样的效果
创建一个三通道bgr图像
import cv2 as cv
import numpy as np
def create_image():
"""创建三维数组,0维为B,1维为G,2维为R"""
img = np.zeros([400, 400, 3], np.uint8) #创建一个三维数组高400,宽400,信号通道3个,初始都为0,每通道占8位个
img[:, :, 0] = np.ones([400, 400]) * 255 #使图像第一个通道为255
img[:, :, 1] = np.ones([400, 400]) * 255
img[:, :, 2] = np.ones([400, 400]) * 255
cv.imshow("new_image", img)
create_image()
cv.waitKey(0)
cv.destroyAllWindows()
此时显示一个纯白图像,也就是255,255,255,可以理解为最亮的,0,0,0则为黑色
创建一个单通道图像
import cv2 as cv
import numpy as np
def create_image():
img = np.ones([400, 400, 1], np.uint8)#可以初使值为1
img = img * 127
cv.imshow("灰色单通道图", img)
create_image()
cv.waitKey(0)
127,127,127为灰色