深度学习 | 实战1-python基本操作

Posted by JoselynZhao on July 6, 2019

GitHub源码

要求

设计python程序,首先安装并导入opencv库: 例如:conda install opencv import cv2

然后使用cv2.imread()读取任意彩色图片为numpy矩阵,然后进行以下操作: (1) 将图片的三个通道顺序进行改变,由RGB变为BRG,并用imshow()或者matplotlib中的有关函数显示图片 (2) 利用Numpy给改变通道顺序的图片中指定位置打上红框,其中红框左上角和右下角坐标定义方式为:假设学号为12069028,则左上角坐标为(12, 06), 右下角坐标为(12+90, 06+28). (不可使用opencv中自带的画框工具) (3) 利用cv2.imwrite()函数保存加上红框的图片。

实验与结果

(1)将图片的三个通道顺序进行改变,由RGB变为BRG,并用imshow()或者matplotlib中的有关函数显示图片。 测试图片如下: 在这里插入图片描述 因为cv2读取图片的通道顺序为B,G,R,所以对应img[:,:,0],img[:,:,1], img[:,:,2]。 要求将RGB变为BRG,即R->B,G->R,B->G。而按照通道顺序,r在第三通道,则第三通道应为B,g在第二通道,则第二通道为R,b在第一通道,则第一通道为G,所以合并顺序应该为[g,r,b].

img = cv2.imread(img_name)
    b = img[:, :, 0]
    g = img[:, :, 1]
    r = img[:, :, 2]
    img = cv2.merge([g, r, b])
    cv2.imshow('BRG', img)
    k = cv2.waitKey(0)  # waitkey代表读取键盘的输入,括号里的数字代表等待多长时间,单位ms。 0代表一直等待
    if k == 27:  # 键盘上Esc键的键值
        cv2.destroyAllWindows()

运行结果为: 在这里插入图片描述

(2)利用Numpy给改变通道顺序的图片中指定位置打上红框

school_number = 18023032
    x1 = 18
    y1 = 2
    x2 = 30 + 18
    y2 = 32 + 2
    img[x1:x2 + 1, y1,0] = 0
    img[x1:x2 + 1, y1,1] = 0
    img[x1:x2 + 1, y1,2] = 255
    img[x1:x2 + 1, y2,0] = 0
    img[x1:x2 + 1, y2,1] = 0
    img[x1:x2 + 1, y2,2] = 255
    img[x1, y1:y2 + 1,0] = 0
    img[x1, y1:y2 + 1,1] = 0
    img[x1, y1:y2 + 1,2] = 255
    img[x2, y1:y2 + 1,0] = 0
    img[x2, y1:y2 + 1,1] = 0
img[x2, y1:y2 + 1,2] = 255

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

cv2.imwrite(img_name2, img)
    img2 = cv2.imread(img_name2)
    cv2.imshow('BRG-1', img2)
    k = cv2.waitKey(0)  # waitkey代表读取键盘的输入,括号里的数字代表等待多长时间,单位ms。 0代表一直等待
    if k == 27:  # 键盘上Esc键的键值
        cv2.destroyAllWindows()

图片保存之后,再次通过cv2.imread()读取显示出来,结果如下: 在这里插入图片描述

源码展示

img_name = 'fff.png'
img_name2 = 'fff1.png'

import numpy as np
if __name__ == '__main__':
    img = cv2.imread(img_name)
    cv2.imshow('RGB', img)
    k = cv2.waitKey(0) # waitkey代表读取键盘的输入,括号里的数字代表等待多长时间,单位ms。 0代表一直等待
    if k ==27:     # 键盘上Esc键的键值
        cv2.destroyAllWindows()

    b = img[:, :, 0]
    g = img[:, :, 1]
    r = img[:, :, 2]
    # r, g, b = cv2.split(img)
    img = cv2.merge([g, r, b])
    cv2.imshow('BRG', img)
    k = cv2.waitKey(0)  # waitkey代表读取键盘的输入,括号里的数字代表等待多长时间,单位ms。 0代表一直等待
    if k == 27:  # 键盘上Esc键的键值
        cv2.destroyAllWindows()

    school_number = 18023032
    x1 = 18
    y1 = 2
    x2 = 30 + 18
    y2 = 32 + 2
    img[x1:x2 + 1, y1,0] = 0
    img[x1:x2 + 1, y1,1] = 0
    img[x1:x2 + 1, y1,2] = 255
    img[x1:x2 + 1, y2,0] = 0
    img[x1:x2 + 1, y2,1] = 0
    img[x1:x2 + 1, y2,2] = 255
    img[x1, y1:y2 + 1,0] = 0
    img[x1, y1:y2 + 1,1] = 0
    img[x1, y1:y2 + 1,2] = 255
    img[x2, y1:y2 + 1,0] = 0
    img[x2, y1:y2 + 1,1] = 0
    img[x2, y1:y2 + 1,2] = 255

    # img[x1:x2 + 1, y1] = (0, 0, 255)
    # img[x1:x2 + 1, y2] = (0, 0, 255)
    # img[x1, y1:y2 + 1] = (0, 0, 255)
    # img[x2, y1:y2 + 1] = (0, 0, 255)
    cv2.imwrite(img_name2, img)
    img2 = cv2.imread(img_name2)
    cv2.imshow('BRG-1', img2)
    k = cv2.waitKey(0)  # waitkey代表读取键盘的输入,括号里的数字代表等待多长时间,单位ms。 0代表一直等待
    if k == 27:  # 键盘上Esc键的键值
        cv2.destroyAllWindows()