前沿
我使用的是Pycharm编译器
用anaconda配置的解释器
安装的库:numpy matplotlib cv2等
在进行下面的工作之前,给各位说说pycham中添加个人信息
#!/usr/bin/python3.6
# -*- coding: utf-8 -*-
# @Time : ${DATE} ${TIME}
# @Author : super_kun
# @Email : xxxxxxxxxxx@xxx.com
# @File : ${NAME}.py
# @Software: ${PRODUCT_NAME}
这个个人觉得有意思
具体步骤参见链接【Pycharm新建文件时 自动添加作者时间等信息】
1 做图像处理,首先需要进行图像读取
1.1 导入库
import numpy as np
import cv2
1.2 导入图片
img = cv2.imread("test1.jpg",0)#注意:这里的0是黑白读取,如果不写,默认是彩色读取
关于读取照片,这里还需要说明的是,最好把照片放在文件所在目录下,否则需要使用完整目录进行,这里我一般使用的是相对路径。
1.3 显示照片
这里需要传入两个值,第一个是名称(就是图像显示窗口的名称),第二个是传入的信息,也就是你的照片(这里是img)
cv2.imshow("test1",img)
1.4 需要设置显示的时间和窗口,否则图像会一闪而过,另外需要销毁窗口(关闭的时候,只用加入一行代码即可)
cv2.waitKey(0)
cv2.destroyAllWindows()
img = cv2.imread(“test1.jpg”,0)#注意:这里的0是黑白读取,如果不写,默认是彩色读取,这里将0去掉
完整代码:
import numpy as np
import cv2
img = cv2.imread("test1.jpg")#注意:这里的0是黑白读取,如果不写,默认是彩色读取
cv2.imshow("test1",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
import numpy as np
import cv2
img = cv2.imread("test1.jpg")#注意:这里的0是黑白读取,如果不写,默认是彩色读取
img = cv2.resize(img, (640, 640), interpolation=cv2.INTER_CUBIC) #这个可以控制输出图的大小,人为设定
cv2.imshow("test1",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
img = cv2.resize(img, (640, 640), interpolation=cv2.INTER_CUBIC) #这个可以控制输出图的大小,人为设定
注意衣一副图像尺寸改变是需要进行插值等操作的,如下所示:![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/114f3cbfd7c936b187f7086c63b49e11.png)
cv2.namedWindow(‘image’, cv2.WINDOW_NORMAL) #这句代码是为了对图像进行拉伸等相关操作的
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e22785836851fd2221418269e3185be4.png)
1.5 保存图像
#!/usr/bin/python3.6
# -*- coding: utf-8 -*-
# @Time : 2020/10/21 10:21
# @Author : ptg
# @Email : zhxwhchina@163.com
# @File : opencv-file1.py
# @Software: PyCharm
"""
以上是作者和文件信息,这个可以在pycharm中进行设置
"""
import numpy as np
import cv2
image = cv2.imread("test1.jpg")#注意:这里的0是黑白读取,如果不写,默认是彩色读取cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.namedWindow('image', cv2.WINDOW_NORMAL) #这句代码是为了对图像进行拉伸等相关操作的
k = cv2.waitKey(0)
if k == 27: #wait for ESC key to exit
cv2.destroyAllWindows()
elif k == ord('s'):
cv2.imwrite('pic.png',image)
cv2.destroyAllWindows()
后面就不详细说了,直提比较重要的地方
2 视频
ret,frame = cap.read()
第一个参数ret 为True 或者False,代表有没有读取到图片
第二个参数frame表示截取到一帧的图片
添加了时间模块,然后对每次读取成功后进行计数加1操作
完整代码如下:
#!/usr/bin/python3.6
# -*- coding: utf-8 -*-
# @Time : 2020/10/21 10:21
# @Author : ptg
# @Email : zhxwhchina@163.com
# @File : opencv-file1.py
# @Software: PyCharm
"""
以上是作者和文件信息,这个可以在pycharm中进行设置
"""
import numpy as np
import cv2
import matplotlib.pyplot as plt
import time
cap = cv2.VideoCapture(0) #这里0代表系统默认相机
count = 0
start_time = time.time()
while(True):
# capture from-by-from
ret,frame = cap.read()
# Our operation on the frame come here
# gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
if ret != True:
break
if ret == True:
count+= 1
cv2.imshow('frame',frame)
if cv2.waitKey(1)& 0xFF==ord('q'):
break
cap.release()
end_time = time.time()
cv2.destroyAllWindows()
sum_time = end_time - start_time
print(count)
print(sum_time)
3 对图像进行通道赋值操作
import numpy as np
import cv2
import matplotlib.pyplot as plt
import time
img = cv2.imread("test1.jpg")
img[:,:,2] = 0;
# img[:,:,0] = 0;
# img[:,:,1] = 0;
cv2.imshow("img",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
可以看到颜色发生改变
在计算机中,一般是B\G\R这个需要注意
而不是使用
这样做比较费时
4 图像的算数运算
4.1 图像混合
import numpy as np
import cv2
import matplotlib.pyplot as plt
import time
img1 = cv2.imread("test1.jpg")
img1 = cv2.resize(img1, (320, 320), interpolation=cv2.INTER_CUBIC)
img2 = cv2.imread("test2.jpg")
img2 = cv2.resize(img2, (320, 320), interpolation=cv2.INTER_CUBIC)
# 注意在使用下面的这个函数的时候,需要确保img1,img2两张图像的尺寸是大小一致的,否则是不能进行叠加的
# 为了使得两幅图的尺寸是一致的,我这里进行了尺寸大小的重新设定,也就是上面的代码
dst = cv2.addWeighted(img1,0.3,img2,0.4,0)
cv2.imshow("img1",img1)
cv2.imshow("img2",img2)
cv2.imshow("dst",dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
5 颜色空间HSV
#!/usr/bin/python3.6
# -*- coding: utf-8 -*-
# @Time : 2020/10/21 10:21
# @Author : ptg
# @Email : zhxwhchina@163.com
# @File : opencv-file1.py
# @Software: PyCharm
# """
# 以上是作者和文件信息,这个可以在pycharm中进行设置
# """
# import numpy as np
# import cv2
# import matplotlib.pyplot as plt
# import time
# #
# cap = cv2.VideoCapture(0) #这里0代表系统默认相机
# count = 0
# start_time = time.time()
# while(True):
# # capture from-by-from
# ret,frame = cap.read()
#
# # Our operation on the frame come here
# # gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
#
# if ret != True:
# break
# if ret == True:
# count+= 1
# cv2.imshow('frame',frame)
# if cv2.waitKey(1)& 0xFF==ord('q'):
# break
# cap.release()
# end_time = time.time()
# cv2.destroyAllWindows()
# sum_time = end_time - start_time
# print(count)
# print(sum_time)
# import numpy as np
# import cv2
# import matplotlib.pyplot as plt
# import time
#
# img = cv2.imread("test1.jpg")
# img[:,:,2] = 0;
# # img[:,:,0] = 0;
# # img[:,:,1] = 0;
# cv2.imshow("img",img)
# cv2.waitKey(0)
# cv2.destroyAllWindows()
#
# import numpy as np
# import cv2
# import matplotlib.pyplot as plt
# import time
# img1 = cv2.imread("test1.jpg")
# img1 = cv2.resize(img1, (320, 320), interpolation=cv2.INTER_CUBIC)
# img2 = cv2.imread("test2.jpg")
# img2 = cv2.resize(img2, (320, 320), interpolation=cv2.INTER_CUBIC)
# # 注意在使用下面的这个函数的时候,需要确保img1,img2两张图像的尺寸是大小一致的,否则是不能进行叠加的
# # 为了使得两幅图的尺寸是一致的,我这里进行了尺寸大小的重新设定,也就是上面的代码
# dst = cv2.addWeighted(img1,0.3,img2,0.4,0)
# cv2.imshow("img1",img1)
# cv2.imshow("img2",img2)
# cv2.imshow("dst",dst)
# cv2.waitKey(0)
# cv2.destroyAllWindows()
import numpy as np
import cv2
import matplotlib.pyplot as plt
import time
cap = cv2.VideoCapture(0)
while(True):
# 获取每一帧
ret,frame = cap.read()
if ret == False:
break
# 转换到HSV
hsv = cv2.cvtColor(frame,cv2.COLOR_RGB2HSV)
# 设定蓝色的阈值
lower_blue = np.array([110,50,50])
upper_blue = np.array([130,255,255])
# 根据阈值构建掩膜
mask = cv2.inRange(hsv,lower_blue,upper_blue)
# 对原图像和掩膜进行为运算
res = cv2.bitwise_and(frame,frame,mask=mask)
# 显示图像
cv2.imshow("frame",frame)
cv2.imshow("mask",mask)
cv2.imshow("res",res)
k = cv2.waitKey(2000)&0xFF
if k == 27:
break
# 关闭窗口
cv2.destroyAllWindows()
未完,待续…