用open cv读取、修改、生成图像

读取并显示图片
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)
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值