homework 1

题目:

设计python程序,首先安装并导入opencv库:
例如:conda install opencv
import cv2 ,安装结果如图,代表安装成功:
在这里插入图片描述
然后使用cv2.imread()读取任意彩色图片为numpy矩阵,然后进行以下操作:
(1) 将图片的三个通道顺序进行改变,由RGB变为BRG,并用imshow()或者matplotlib中的有关函数显示图片

  • cv2.imread 函数会将图像的通道读为 BGR 顺序,通过np.array()转换为数组,代码如下:
# 读入图像
img = cv2.imread('rgb.jpg', 1)

# 转化数组
imgArr = np.array(img)
cv2.imshow('cv2-imgArr',imgArr)
  • 使用cv2.imshow显示如下:
    在这里插入图片描述
  • cv2.split函数分离出的B、G、R是单通道图像, 输出的参数分别来自 数组中的第0层,第1层,第2层 ,分别存储的是 蓝色 0-Blue,1-Green,2-Red三种颜色的灰度值。
  • 灰度值只是表征单色的亮暗程度。
    每一层矩阵(4003001/2/3)分别对应R/G/B的灰度值,此处的矩阵仅仅表示对应单色光灰度值,不是彩色的图像。
  • 现在读取出 Red, blue, green 分别对应的灰度值通过cv2.split 函数存储为: r,b,g, 分离出灰度值后,分别将其他颜色图层使用0值填充,按分离顺序合并,代码如下:
# 提取BGR数组
(b, g, r) = cv2.split(imgArr)

zero = np.zeros(imgArr.shape[:2], dtype = "uint8")
bl=cv2.merge([b,zero,zero])
gr=cv2.merge([zero,g,zero])
re=cv2.merge([zero,zero,r])
cv2.imshow("blue",bl)
cv2.imshow("red",re)
cv2.imshow("green",gr)
cv2.waitKey(0)
  • 分别显示如下图:
    在这里插入图片描述
  • 实验目的是改变图像的颜色通道 : 从RGB 变为 BRG ,也就是说, 将原来通道中的 Red 的灰度值变成 Blue通道 的灰度值, Green的灰度值变为Red通道的灰度值, Blue的灰度值变为Green通道的灰度值,代码如下:
imgChange = cv2.merge([g,r,b]) #RGB->GBR  应该是BRG,但是显示结果为GBR
#imgChange = cv2.merge([r,b,g]) # ok RGB -> BRG   显示结果为BRG。?

cv2.imshow("imgChange-cv2merge", imgChange)
cv2.imwrite('imgChange-cv2.jpg', imgChange)
cv2.waitKey(0)
  • cv.2 显示图像时,采用的通道顺序为 BGR 。于是新的合并顺序为,g,r,b,在本实验中取得的效果如下:
    在这里插入图片描述
    可以发现 ,原图中的红色变成了绿色, 绿色变成了蓝色,蓝色变成了红色 。
    但我期待的结果是, 红色变成蓝色,绿色变成红色,蓝色变成了绿色,要达到这个结果,在通道合并时的顺序是r,b,g ,在合并时,使用rbg顺序得到的结果如下:
    在这里插入图片描述

(2) 利用Numpy给改变通道顺序的图片中指定位置打上红框,其中红框左上角和右下角坐标定义方式为:假设学号为12069028,则左上角坐标为(12, 06), 右下角坐标为(12+90, 06+28). (不可使用opencv中自带的画框工具)

  • 我的学号为18023022, 因残我的左上角坐标为(18,02),右下角坐标为(18+30=48,02+22=24),所以对应了图像数组中的第 18行到48行, 第2列到第24列,因此我先将红色通道中的矩阵位置的灰度值调到最大,然后将绿色通道和蓝色通道的灰度值调到最小,画框代码如下:
(blue,gre,red)=cv2.split(imgChange) # 从交换通道后的图像数组中分离出新通道

red[18:48,2]=255
red[18:48,24]=255
red[18,2:24]=255
red[48,2:24]=255

blue[18:48,2]=0
blue[18:48,24]=0
blue[18,2:24]=0
blue[48,2:24]=0


gre[18:48,2]=0
gre[18:48,24]=0
gre[18,2:24]=0
gre[48,2:24]=0

  • 画框结果如下:
    在这里插入图片描述

(3) 利用cv2.imwrite()函数保存加上红框的图片。

  • 保存代码如下:
cv2.imshow("redRect-imgChange",imgRect)
cv2.imwrite('redRect-imgChange.jpg', imgRect)
cv2.waitKey(0)
  • 保存结果如下:
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值