基本的图像操作

OpenCV 提供了很多图像操作的工具,例如图像的读取与保存、滤波等工具。这些工具是开发计算机视觉项目的基础,因此熟悉与掌握这些工具的使用对以后的学习任务非常重要。
本实训针对图片的基本读取和保存、图片通道分离与合并、边界填充与图片融合等操作进行介绍,通过基本知识与实际案例结合的方式,并辅助以练习,帮助你熟悉与掌握 OpenCV 的使用。

第1关:图片的基本读取和保存操作

import cv2
def Gen():
    filepath = '/data/workspace/myshixun/task1/cat.jpg'
    # 读取给定路径filepath的图片cat.jpg
    ########## Begin ##########
    retval=cv2.imread(filepath)
    ########## End ##########

    # 读取感兴趣窗口[100:150,200:300]并保存为指定路径savepath
    savepath='/data/workspace/myshixun/task1/out/cap.png'
    ########## Begin ##########
    
    img3 = retval[100:150,200:300]
    cv2.imwrite(savepath, img3)
    ########## End ##########


第2关:图像通道分离与合并操作

import cv2


# 实现图像颜色通道分离和保存
def task2():
    filepath = "/data/workspace/myshixun/task2/"
    img = cv2.imread( filepath + 'pic.jpg')
    
    # 请分离图像的B,G,R通道,并保存到给定filepath下的out文件夹,
    # 三个通道分别保存为r.png、g.png、b.png
    ########## Begin ##########
    B,G,R = cv2.split(img)
    cv2.imwrite(filepath+'/out/r.png',R)
    cv2.imwrite(filepath+'/out/G.png',G)
    cv2.imwrite(filepath+'/out/b.png',B)
    ########## End ##########
    
    # 请合并分离的通道,并在out文件夹下保存红色通道的彩色图像color_r.png
    ########## Begin ##########
    img1 = cv2.merge((B,G,R))
    img1[:, :, 0] = 0
    img1[:, :, 1] = 0
    cv2.imwrite(filepath+'/out/color_r.png', img1)
    
    
    ########## End ##########

第3关:边界填充与图像融合

import cv2
import warnings
import matplotlib.cbook
warnings.filterwarnings("ignore",category=matplotlib.cbook.mplDeprecation)

def padding():
    filepath = "/data/workspace/myshixun/task3/"
    # 请按照step1的要求完成图像填充操作
    ########## Begin ##########
        # 1. 读取图片filepath文件夹下的six.png
    img = cv2.imread(filepath + 'six.png')
    # 2. 定义上下左右扩充的长度为30。
    top_size, bottom_size, left_size, right_size = (30, 30, 30, 30)
    # 3. 根据本节教程所学,更换通道顺序。
    img = img[:,:,(2,1,0)]
    # 4. 参考本节给出的示例,请分别完成填充类型
    replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)
    reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_REFLECT)
    reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)
    wrap = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP)
    constant = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_CONSTANT, value=0)
    
    
    ########## End ##########
    
    # 绘制图像并保存
    import matplotlib.pyplot as plt
    plt.subplot(231), plt.imshow(img), plt.title('ORIGINAL')
    plt.subplot(232), plt.imshow(replicate), plt.title('REPLICATE')
    plt.subplot(233), plt.imshow(reflect), plt.title('REFLECT')
    plt.subplot(234), plt.imshow(reflect101), plt.title('REFLECT_101')
    plt.subplot(235), plt.imshow(wrap), plt.title('WRAP')
    plt.subplot(236), plt.imshow(constant), plt.title('CONSTANT')

    plt.savefig(filepath + "out/padding.png")

def fusion():
    filepath = "/data/workspace/myshixun/task3/"
    savepath = "/data/workspace/myshixun/task3/out/fusion.png"
    
    # 请按照step1的要求完成图像融合操作。
    ########## Begin ##########
        # 1. 读取filepath路径下的cat.jpg, dog.jpg
    img_cat = cv2.imread(filepath + 'cat.jpg')
    img_dog = cv2.imread(filepath + 'dog.jpg')
    # 2. resize两个读取的图像为相同大小(550, 366)
    img_cat_resize = cv2.resize(img_cat, (550, 366))
    img_dog_resize = cv2.resize(img_dog, (550, 366))
    # 3. 根据要求,融合两张读取的图像
    res = cv2.addWeighted(img_cat_resize, 0.7, img_dog_resize, 0.3, 0)
    # 4. 在savepath下保存融合的图片
    cv2.imwrite(savepath, res)
    
    
    ########## End ##########

大家需要平台上的实验答案,可以留言,博主尽量帮助你们分享!!!!

猜你喜欢

转载自blog.csdn.net/weixin_44196785/article/details/115055154