看论文学技能之图像局部放大图

·论文中图像局部放大展示结果,来可视化图像细节信息

在这里插入图片描述
咱也学学来简单实现一下~~嘻嘻

·python代码实现(注释版)

import cv2
import numpy as np

def myfun(img,x,y,w,h):
    #img:输入图像
    #x,y,w,h:局部图像的坐标和宽高
    #返回值:局部图像放大后的图像
    #局部图像放大
    img1=img[y:y+h,x:x+w]
    img1 = cv2.resize(img1,(w*2,h*2),interpolation=cv2.INTER_CUBIC)
    return img1

if __name__ == '__main__':
    # 读取图像
    img = cv2.imread('./00001.png')
    #获取图像的高和宽
    sp = img.shape#读取出的图像矩阵的shape是按 高度、宽度、通道数 这个顺序,图像宽度是第一个维度,其实也就是返回的图像矩阵的行数、列数、通道数
    img_h = sp[0] #高
    img_w = sp[1] #宽
    # print(sp)
    #注:实际处理中是先宽后高的
    #初始化一个两倍宽,等高的img2,用来存放最终结果
    img2 = cv2.resize(img,(img_w*2,img_h))
    # 设置要放大区域的信息。x,y,w,h:局部图像的坐标和宽高
    x = 150
    y = 100
    w = 200
    h = 200
    #将待放大区域在图中框出
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)
    # 调用局部图像放大函数
    img_big = myfun(img,x,y,w,h)
    #将放大图像调整至图像大小
    img_big = cv2.resize(img_big,(img_w,img_h))
    # print(img_big.shape)
    #将原图和放大图复制到img2
    img2[0:img_h,0:img_w] = img
    img2[0:img_h,img_w:img_w*2] = img_big
    # 将放大后区域在图img2中框出
    cv2.rectangle(img2, (img_w, 0), (img_w*2, img_h), (0, 0, 255), 2)
    #绘制放大区域前后的连接线
    img = cv2.line(img2, (x, y), (img_w, 0), (0, 0, 255))
    img = cv2.line(img2, (x, y+h), (img_w, img_h), (0, 0, 255))
    img = cv2.line(img2, (x+w, y), (img_w*2, 0), (0, 0, 255))
    img = cv2.line(img2, (x+w, y+h), (img_w*2, img_h), (0, 0, 255))
    # 展示结果
    cv2.imshow('img', img2)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

·结果示例

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐