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()
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()
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()