opencv2:边界填充

1.在用plt.imshow和cv2.imshow显示同一幅图时可能会出现颜色差别很大的现象。


原因:opencv的接口使用BGR,而matplotlib.pyplot 则是RGB模式。

解决:

import cv2 as cv
import matplotlib.pyplot as plt

img = cv.imread("D:\\PythonProject_Class\\test_Data\\cat.jpg")  # CV 读取图片BGR
img2 = cv.cvtColor(img, cv.COLOR_BGR2RGB) # RGB转变BGR 
plt.imshow(img2)
plt.show()

img3=plt.imread("D:\\PythonProject_Class\\test_Data\\cat.jpg")# plt 读取图片RGB
img4=cv.cvtColor(img3, cv.COLOR_BGR2RGB) #BGR转变RGB
cv.imshow("img",img4)
cv.waitKey(0)
cv.destroyAllWindows()

2.plt.subplot函数

函数原型 subplot(nrows, ncols, index, **kwargs),一般我们只用到前三个参数,将整个绘图区域分成 nrows 行和 ncols 列,而 index 用于对子图进行编号。

第一个参数代表子图的行数,第二个参数代表该行图像的列数,第三个参数代表每行的第几个图像。

import matplotlib.pyplot as plt
# 使用plt.subplot来创建小图.

#plt.subplot(221)表示将整个图像窗口分为2行2列, 当前位置为1.
plt.subplot(2,2,1)

# plt.subplot(222)表示将整个图像窗口分为2行2列, 当前位置为2.
plt.subplot(2,2,2)   # 第一行的右图

# plt.subplot(223)表示将整个图像窗口分为2行2列, 当前位置为3.
plt.subplot(2,2,3)

# plt.subplot(224)表示将整个图像窗口分为2行2列, 当前位置为4.
plt.subplot(2,2,4)

plt.show()

opencv2:边界填充_第1张图片

3.边界填充

#边界填充
import numpy as np#读取的格式是BGR,其他的工具包可能不是这个格式,需要转换
import matplotlib.pyplot as plt
import cv2

top,bottom,left,right=(50,50,50,50)#填充的大小
img0=cv2.imread("D:\\PythonProject_Class\\test_Data\\cat.jpg")
img = cv2.cvtColor(img0, cv2.COLOR_BGR2RGB)
replicate=cv2.copyMakeBorder(img,top,bottom,left,right,borderType=cv2.BORDER_REPLICATE)#复制边缘像素
reflect=cv2.copyMakeBorder(img,top,bottom,left,right,borderType=cv2.BORDER_REFLECT)#反射法,对称过来
reflect101=cv2.copyMakeBorder(img,top,bottom,left,right,borderType=cv2.BORDER_REFLECT101)#反射法,对称过来
wrap=cv2.copyMakeBorder(img,top,bottom,left,right,borderType=cv2.BORDER_WRAP)#包裹法
constant=cv2.copyMakeBorder(img,top,bottom,left,right,borderType=cv2.BORDER_CONSTANT,value=0)#常量法,用value填充

plt.subplot(2,3,1),plt.imshow(img,'gray'),plt.title('ORIGINAL')
plt.subplot(2,3,2),plt.imshow(replicate,'gray'),plt.title('replicate')
plt.subplot(2,3,3),plt.imshow(reflect,'gray'),plt.title('reflect')
plt.subplot(2,3,4),plt.imshow(reflect101,'gray'),plt.title('reflect101')
plt.subplot(2,3,5),plt.imshow(wrap,'gray'),plt.title('wrap')
plt.subplot(2,3,6),plt.imshow(constant,'gray'),plt.title('constant')

plt.show()

opencv2:边界填充_第2张图片

 4.数值运算

对每个点都减233。

规则就是循环,超出0--255的界限后,比如255+1=256,这个点不会是256,而是0

# 数值运算
import numpy as np  # 读取的格式是BGR,其他的工具包可能不是这个格式,需要转换
import matplotlib.pyplot as plt
import cv2

img = cv2.imread("D:\\PythonProject_Class\\test_Data\\cat.jpg")
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.subplot(2, 2, 1), plt.imshow(img2)

img3 = img2 + 24  # 对所有img2的像素加24
plt.subplot(2, 2, 2), plt.imshow(img3)

img4 = cv2.addWeighted(img2, 0.8, img3, 0.2, 100)  # img4=0.8*img2+0.2*img3+100
plt.subplot(2, 2, 3), plt.imshow(img4)

img5=cv2.resize(img2,(20,20))#重新指定图像的大小(马赛克)
plt.subplot(2, 2, 4), plt.imshow(img5)

plt.show()

opencv2:边界填充_第3张图片

你可能感兴趣的:(opencv,python,opencv,计算机视觉)