import cv2
import numpy as np
from PIL import Image
%matplotlib inline
def show_cvimg(im):
return Image.fromarray(cv2.cvtColor(im,cv2.COLOR_BGR2RGB))
def stack_image(path='71_mprnet.png', pt1=(120, 20), pt2=(390, 12), width=100):
# 在指定的位置绘制正方形并在右下角放大该局部位置
# pt:正方形位置,width : 正方形宽度 scale: 放大倍数
image = cv2.imread(path)
h, w, c = image.shape
if w % 2 != 0:
if h % 2 != 0: # 宽高都是奇数
image = cv2.resize(image, (w - 1, h - 1))
else: # 宽是奇数,高是偶数
image = cv2.resize(image, (w - 1, h))
elif h % 2 != 0: # 高是奇数,宽是偶数
image = cv2.resize(image, (w, h - 1))
# 定义缩放比
scale = h / w
# patch1
pt1_ = (pt1[0] + width, pt1[1] + int(width * scale))
cv2.rectangle(image, pt1, pt1_, (0, 0, 255), 2)
# patch2
pt2_ = (pt2[0] + width, pt2[1] + int(width * scale))
cv2.rectangle(image, pt2, pt2_, (0, 255, 0), 2)
# 要放大的部分
patch1 = image[pt1[1] + 2:pt1[1] + int(width * scale) - 2, pt1[0] + 2:pt1[0] + width - 2, :]
patch1 = cv2.resize(patch1, (int(w / 2), int(h / 2)))
patch2 = image[pt2[1] + 2:pt2[1] + int(width * scale) - 2, pt2[0] + 2:pt2[0] + width - 2, :]
patch2 = cv2.resize(patch2, (int(w / 2), int(h / 2)))
patch = np.hstack((patch1, patch2))
image_stack = np.vstack((image, patch))
return image_stack
# 展示图片
image = stack_image()
show_cvimg(image)
# 保存图片
image_stack = stack_image()
cv2.imwrite('image_stack.png', image_stack, [cv2.IMWRITE_PNG_COMPRESSION, 0])
论文图片局部放大
于 2022-04-20 00:24:21 首次发布