读取并显示图片
import cv2 as cv #首先引入cv包, cv2 as cv 是为了简写,相当于宏定义
img = cv.imread('C:/Users/kyle/Desktop/002.jpg') #读取图片,imread是包中的读取方法,括号里是图片地址,img是自定的变量名
cv.imshow('image', img) #imshow是显示函数,“‘image’是显示的窗口的名字,"img"是定义的图片变量
这样直接运行图片只会显示一瞬间。
如果要一直显示,可以再加上一行代码
cv.waitKey(0) #后面的参数如果大于0也是只显示一瞬间,如果小于等于0就会一直显示,按一下键盘就结束了。
读取时可以选择不同的形式读入,只需要再读取时添加一个参数。
cv2.IMREAD_UNCHANGED - 以 原图形式 读入
cv2.IMREAD_GRAYSCALE - 以 灰度形式 读入
cv2.IMREAD_COLOR - 以 彩色形式 读入
例如
img = cv2.imread('C:/Users/kyle/Desktop/002.jpg', cv2.IMREAD_GRAYSCALE) #必须大写
这样显示出来的是灰度图。
如果要使图片可以用鼠标调整大小,可以加上一行代码:
cv2.namedWindow('image', 0) #这个参数如果是偶数就可以调整大小,是奇数就不能调整大小。(我也不知道为什么)
这里提供了一个可以调整大小的窗口,如果现实的图片窗口的名字和这个调整窗名字一样,图片就会在这个窗口中显示
如果没有图片,就会显示一个灰色的窗口。
获取图片参数
1.图片大小
print(img.shape)
这说明图像纵向像素是380,横向像素是892,模式是RGB;
2.像素获取
直接打印
print(img)
顺序是(B G R )
也可以打印某个区域,某个通道的像素:
print(img[ : , : ,0]) #前面是区域范围,不填默认整个图像,0--B,1--G,2--R
保存参数
1.图片大小
height = img.shape[0] #0代表高
width = img.shape[1] #1代表宽
2.分离并保存各个通道
b, g, r = cv2.split(img)
cv2.imshow("b", b)
cv2.imshow("g", g)
cv2.imshow("r", r)
合成:
imgbgr = cv2.merge([b, g, r])
当然,也可以不用这个顺序,这样的话会得到一些有意思的图片
3.像素数组
img1 = img.copy() #直接用库函数复制
#引入numpy包
import numpy
#---省略---
pixel_data = numpy.array(img) # [ˈpɪksl] 美 [ˈpɪksl] 像素
#print(pixel_data)
修改像素
比较简单,直接修改,有两种形式:
1:img[x,y,z]=() x,y是坐标(图片左上角是0,0),z是通道0-B,1-G,2-R,这样是修改一个通道的值()中为0~255
2:img[x,y]=[a,b,c] x,y 是坐标,[a,b,c]是三个通道的值
也可以修改一个区域
img[200:300, 0:200] = [0,0,0]
cv2.imshow('image', img)
裁剪:
part = img[200:300, 0:200] #提取了部分图像
cv2.imshow('image', part)
生成图像
这个需要引入numpy包
def creat_image():
img = numpy.zeros([40,40,1], numpy.uint8)
img[0 :30 ,0 :30,0] = numpy.ones([30,30])*200 #一个通道也要加参数 0
cv2.imshow("new image",img)
生成随机数
import random
random.randint(1,10)
numpy.zeros([40,40,1], numpy.uint8) “zeros”表示初始值为0,前两个参数为图像大小,第三个参数为通道数,1为灰度,3是RGB模式,unit8表示每个像素的位数是八位。
img[10 :30 ,10 :30,0] = numpy.ones([20,20])*200 复制操作,“.ones”代表初始值是1,是乘法的基数。[30,30]代表所选择区域的大小,200是灰度值
将图像保存到计算机
cv2.imwrite("D:p.png",img)