import cv2
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
img=cv2.imread("D:/WeChat.picture/cat.jpg")
官方的定义是: IPython有一组预先定义好的所谓的魔法函数(Magic Functions), 你可以通过命令行的语法形式来访问它们。
可见“%matplotlib inline”就是模仿命令行来访问magic函数的在IPython中独有的形式。
其作用就是在你调用plot()进行画图或者直接输入Figure的实例对象的时候,会自动的显示并把figure嵌入到console中。 如果不加上%maplotlib inline 的话,每次figure的显示都需要plt.show();
cv2.imshow("image",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
img.shape #(h w c)
img =cv2.imread("D:/WeChat.picture/cat.jpg",cv2.IMREAD_GRAYSCALE)
img
def cv_show(name,img): #name 即运行窗口的名字
cv2.imshow('mane',img) #img = cv2_imread("图片路径",cv2.IMREAD_彩色(COLOR)还是灰色(GRAYSCALE))
cv2.waitKey(0) #等待时间 毫秒级
cv2.destroyAllWindows() #按任意键停止
cv2.imshow("image",img)
cv2.waitKey(0) # 等待时间,毫秒级,0表示任意键终止
cv2.destroyAllWindows()
# 保存
cv2.imwrite("D:/WeChat.picture/N0.1.png",img)
img.dtype #数据类型 uint8的范围为 (0,255)
img.size #像素点大小
type(img)
vc= cv2.VideoCapture("D:/WeChat.picture/ocean.mp4")
# 检查文件是正常打开
if vc.isOpened(): #注意大小写 如isopened 则错误
open, frame = vc.read()
else:
open = False
while open:
ret,no = vc.read()
if no is None:
break
if ret == True:
gray = cv2.cvtColor(no, cv2.IMREAD_COLOR) # or v2.cvtColor(frame, cv2.COLOR_BGR2SGRAY)
cv2.imshow("result",gray)
if cv2.waitKey(50) & 0xFF ==27: # &0xFF == 27 表示按Esc键退出 即break
break
vc.release()
cv2.destroyAllWindows()
img = cv2.imread("D:/WeChat.picture/game.jpg") #ypeError:“NoneType”对象不可订阅 少了个 .
pic = img [200:300,200:400]
cv2.imshow("pic",pic) # cv2.imshow("pic") mShow()缺少所需的参数
cv2.waitKey(10000) # cv2.waitKey(x) x 表示停留时间 , x = 0 表示∞
cv2.destroyAllWindows()
img = cv2.imread("D:/WeChat.picture/game.jpg")
b,g,r = cv2.split(img) #顺序 b g r
#b ,g ,r = img[:,:,0] ,img[:,:,1] , img[:, :, 2]
#合并
img = cv2.merge((b,g,r)) # :Bad argument
img.shape # 图片的高度 以及 宽度等
#只保留某一个通道 b g r 分别对应的数字为 0 1 2
cur_img = img.copy()
cur_img [:,:,0] = 0
cur_img [:,:,2] = 0
cv_show("B",cur_img)
import cv2
img = cv2.imread("D:/WeChat.picture/cat.jpg")
top_size ,bottom_size,left_size,right_size = (50,50,50,50)
replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size,right_size, borderType = cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img, top_size,bottom_size, left_size, right_size,cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(img , top_size, bottom_size, left_size, right_size,cv2.BORDER_CONSTANT,value = 0) # 0 表示黑色
import matplotlib.pyplot as plt
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()
img_scenery = cv2.imread("D:/WeChat.picture/scenery.jpg")
img_yuan = cv2.imread("D:/WeChat.picture/yuan.png")
img_scenery.shape, img_yuan.shape
注意 在OpenCV中,img.shape[0]得到的是图片的高,img.shape[1]得到是图片的宽, 可是在cv2.resize(img, (dimension[0], dimension[1]))函数里,dimension[0]却是新图片 的宽,dimension[1]是新图
img_yuan = cv2.resize(img_yuan,(2280,1080)) # 应该注意 高度 于 宽度 的顺序
img_yuan.shape
res = img_yuan + img_scenery
plt.imshow(res)
plt.show()
res = cv2.resize(img_yuan,(0,0), fx=1, fy=1.5) # 此时的图片大小 已经进行了此操作 img_yuan = cv2.resize(img_yuan,(2280,1080))
plt.imshow(res)
plt.show()
# R = αA + βB + c (c 为偏知项,在亮度级上微调 ,α拟A的权重)
# 融合不是简单 的相加
res = cv2.addWeighted(img_yuan,0.4,img_scenery,0.6,12)
plt.imshow(res)
plt.show()