import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt

img = cv.imread("new.jpg")
cv.rectangle(img,(1820,1390),(1888,1504),(0,0,255),5)
#从图片中获取的内容要横纵坐标转换一下,最终获取到区域像素范围。
juzi = img[1390:1504,1820:1888]
#获取到这些内容了我们把它放到图片中的指定位置,注意,位置区域大小要和感兴趣的图片区域大小相同
img[1543:1657,1900:1968] = juzi

cv.namedWindow('img',cv.WINDOW_NORMAL)
cv.imshow('img',img)
'''
cv2.copyMakeBorder()方法用于在像相框一样的图像周围创建边框。
参数:
src:它是源图像。
top:它是顶部方向上的像素数的边框宽度。
bottom:它是底部方向上的像素数的边框宽度。
left:它是左侧像素的边界宽度。
right:它是沿正确方向的像素数的边框宽度。
borderType:它描述了要添加哪种边框。它由cv2.BORDER_CONSTANT,cv2.BORDER_REFLECT等标志定义
cv2.BORDER_CONSTANT:添加的边界框像素值为常数(需要额外再给定一个参数)
cv2.BORDER_REFLECT:添加的边框像素将是边界元素的镜面反射,类似于gfedcb|abcdefgh|gfedcba
cv2.BORDER_REFLECT_101 or cv2.BORDER_DEFAULT:和上面类似,但是有一些细微的不同,类似于gfedcb|abcdefgh|gfedcba
cv2.BORDER_REPLICATE:使用最边界的像素值代替,类似于aaaaaa|abcdefgh|hhhhhhh
cv2.BORDER_WRAP:不知道怎么解释,直接看吧,cdefgh|abcdefgh|abcdefg
value:这是一个可选参数,如果border type为,则描述边框的颜色cv2.BORDER_CONSTANT。
返回值:它返回一个图像。
'''
replicate = cv.copyMakeBorder(img,10,10,10,10,cv.BORDER_REPLICATE)
reflect = cv.copyMakeBorder(img,10,10,10,10,cv.BORDER_REFLECT)
reflect101 = cv.copyMakeBorder(img,10,10,10,10,cv.BORDER_REFLECT_101)
wrap = cv.copyMakeBorder(img,10,10,10,10,cv.BORDER_WRAP)
constant = cv.copyMakeBorder(img,10,10,10,10,cv.BORDER_CONSTANT)

plt.subplot(231),plt.imshow(img,'gray'),plt.title('ORIGINAL')
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')

plt.show()

cv.waitKey(0)
cv.destroyAllWindows()