赞
踩
这里的前期工作比较简略。因为基于已经成功安装了pycharm和anaconda等相关工具,并且有一定的工具使用基础。
这里建议使用Anaconda创建虚拟环境,然后在虚拟环境里面进行安装库
pip install opencv-python
pip install opencv-contrib-python
Jupyter Notebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果。
这里安装Jupyter Notebook使得我们可以进行交互式编程,从而对中间结果进行更好的可视化呈现。
pip install jupyter
#可以通过jupyter notebook进入
#终端输入
jupyter notebook
#安装自动补全插件
pip install jupyter_contrib_nbextensions
jupyter安装参考网站
jupyter notebook操作手册
0-255表示一个像素点,矩阵代表大小,行*列=总像素点个数。然后黑白图由一个通道组成,彩色图像由三个通道,RGB组成。
import cv2
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
#cv2不能读取中文路径,最好采用相对路径
#opencv读取的格式是BGR
img = cv2.imread("cvimage.png")
#灰度读取
img1 = cv2.imread("cvimage.png",cv2.IMREAD_GRAYSCALE)
cv2.imshow('image',img)#img对应上文读取的
#等待时间,0表示按任意键终止
cv2.waitKey(0)
cv2.destroyAllWindows()
#图像保存
cv2.imwrite('image.png',img)
#封装函数
def cv_show(name,img):
cv2.imshow(name,img)
cv2.waitKey(0)
cv2.destroyAllWindows()
vc = cv2.VideoCapture("test.mp4")
if vc.isOpened():
open,frame = vc.read()
else:
open = False
frame.shape
while open:
ret,frame = vc.read()
if frame is None:
break
if ret == True:
#转化为灰度图像
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
#展示灰色图像
cv2.imshow('result',gray)
#正常速度1秒30帧,所以33秒比较合适,然后0XFF是表示按任意键退出
if cv2.waitKey(33) & 0xFF == 27:
break
vc.release()
cv2.destroyAllWindows()
img = cv2.imread("image.png")
#截取其中的一部分图像
cat = img[0:50,0:200]
#这个是前面的封装函数
cv_show("image",cat)
#cv2里面彩色图片的通道顺序是b,g,r
b,g,r = cv2.split(img)
#上面是拆分通道,下面是组合通道
img_1 = cv2.merge((b,g,r))
cv_show("imgae",img_1)
b,g,r颜色分析
#只保留B
B_img = img.copy()
B_img[:,:,1] = 0
B_img[:,:,2] = 0
cv_show('B',B_img)
#只保留G
G_img = img.copy()
G_img[:,:,0] = 0
G_img[:,:,2] = 0
cv_show('G',G_img)
#只保留R
R_img = img.copy()
R_img[:,:,0] = 0
R_img[:,:,1] = 0
cv_show('R',R_img)
因此可以得到B是蓝色通道,而G是绿色通道,R是红色通道
#定义边界值 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) #反射法,对称复制,daad类似 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,borderType = cv2.BORDER_REFLECT_101) #外包装法,多重复制 wrap = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType = cv2.BORDER_WRAP) #常量法,常量填充 constant = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType = cv2.BORDER_CONSTANT,value = 0) import matplotlib.pyplot as plt plt.subplot(231),plt.imshow(img,'gray'),plt.title('ORIGINAI') 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')
使用cv2.imread()读取图像时,默认彩色图像的三通道顺序为B、G、R,这与我们所熟知的RGB中的R通道和B通道正好互换位置了。而使用plt.imshow()函数却默认显示图像的通道顺序为R、G、B,导致图像出现色差发蓝。可以使用互换方式然后使得重新为R,G,B方式。
b,g,r = cv2.split(img)
img = cv2.merge((r,g,b))
img_one = cv2.imread("image.png")
img_two = cv2.imread("image.png")
img_one = img_one+10
img_one[:5,:,0]
cv_show("",img_one)
#相当于mod256,因为uint8最多到255
img_three = (img_one+img_two)
cv_show("",(img_one+img_two))
#这里的相加到了超过255,只会记作255
img_four = cv2.add(img_one,img_two)
#相减同样的最多到0
img_five = cv2.subtract(img_one,img_two)
cv_show("",img_four)
cv_show("",img_five)
#shape值不同没有办法执行相加相减操作
img_one = cv2.imread('one.png')
img_two = cv2.imread("two.png")
print(img_one.shape,img_two.shape)
#两个的shape值不相同,因此需要进行转化
#resize也可使用倍数(img,(0,0),fx=x,fy=x)
img_two = cv2.resize(img_two,(1200,800))
img_two.shape
res = cv2.addWeighted(img_one,0.4,img_two,0.6,0)
plt.imshow(res)
附上最后我使用的图片、
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。