1、二值图像:黑与白
注意:如果在使用的过程中,对图片进行处理后,显示的图片的大小过大可以在进行如下操作。
cv2.namedWindow("名称",0)
cv2.imshow("名称",图片来源)
PS:两者的名称要一致。
将图片灰度设置,代码如下:
import cv2
img = cv2.imread("E:\PYthon\pycharm\pythonProject\pythonProject/1.jpg")
imggry = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#灰度设定的函数
cv2.imshow("imggray",imggry)
cv2.waitKey(0)
import cv2
img = cv2.imread("图片路径")
imgblur = cv2.GaussianBlur(img,(7,7),0)#模糊函数
cv2.imshow("imgblur"imgblur)
cv2.waitKey(0)
对于模糊函数做一些属性的解释说明:
src:表示需要处理的图片
ksize:内核大小,High和Weigh都是奇数
其他的设置为0即可。
采取图片的轮廓,使用下面的函数
imgCanny = cv2.Canny(img,100,100)#img:处理图片 100,100是处理的阈值大小
阈值的取值:
低于阈值1的像素点会被认为不是边缘;
高于阈值2的像素点会被认为是边缘;
在阈值1和阈值2之间的像素点,若与第2步得到的边缘像素点相邻,则被认为是边缘,否则被认为不是边缘。
边缘定于为颜色、亮度等的急剧变化
因为以下的函数会使用到kernel(内核)所以通过需要引入numpy库。
import numpy as np
kernel = np.ones((5,5),np.unit8)
imgDialation = cv2.dilate(imgCanny,kernel,iterations=5)#iterations:迭代的次数
cv2.imshow("Dialation",imgDialation)
kernel:核函数只是用来计算映射到高维空间之后的内积的一种简便方法。
迭代的次数越多实际的边缘变厚的效果就越明显。
import cv2
imgEroded = cv2.erode(imgDialation,kernel,iterations=1)
cv2.namedWindows("imgEroded",0)
cv2.imshow("imgEroded",imgEroded)
该图片的侵蚀是在原来图片膨胀的基础上进行处理的,代码中的imgEroded则是上面1.4膨胀后的图片。
import cv2
import numpy as np
img = cv2.imread("D:/12.jpg")
kernel = np.ones((5,5),np.uint8)
imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
imgBlur = cv2.GaussianBlur(imgGray,(7,7),0)
imgCanny = cv2.Canny(img,100,200)
imgDialation = cv2.dilate(imgCanny,kernel,iterations=1)
imgEroded = cv2.erode(imgDialation,kernel,iterations=1)
cv2.namedWindow("img",0)
cv2.imshow("img",img)
cv2.namedWindow("imgGray",0)
cv2.imshow("imgGray",imgGray)
cv2.namedWindow("imgBlur",0)
cv2.imshow("imgBlur",imgBlur)
cv2.namedWindow("imgCanny",0)
cv2.imshow("imgCanny",imgCanny)
cv2.namedWindow("imgDialation",0)
cv2.imshow("imgDialation",imgDialation)
cv2.namedWindow("imgEroded",0)
cv2.imshow("imgEroded",imgEroded)
cv2.waitKey(0)
1、首先查询图片的大小
2、利用修改图片大小的函数进行指定修改
imgResize = cv2.resize("修改的图片",(宽,高))#修改图片大小的函数
print(imgResize.shape)#输出图片的大小
在原有的图片上进行特定的裁剪。注意:裁剪的函数与调整图片大小的函数数字参数进行区别开。
imgCropped = img[0:200,300:500]#切割裁取特定的图片的大小,前面是高度(竖着为高),后面的是宽度(横着为宽)。也就是从高度0到高度200;宽度300到500地方停止
import cv2
import numpy as np
img = cv2.imread("D:/12.jpg")
imgResize = cv2.resize(img,(300,500))#修改图片大小
imgCropped = img[0:200,300:500]#切割裁取特定的图片的大小,前面是高度(竖着为高),后面的是宽度(横着为宽)。也就是从高度0到高度200;宽度300到500地方停止
print(img.shape)#输出图片的大小
print(imgResize.shape)
cv2.imshow("img",img)
cv2.imshow("img Resize",imgResize)
cv2.imshow("img Cropped",imgCropped)
cv2.waitKey(0)
由于视频是由图片一帧一帧的组合而成的,所以使用一个循环来解决视频展示的问题
import cv2
cap = cv2.VideoCapture(“视频路径”)#绝对路径和相对路径
while True:#死循环,一直执行
success,img = cap.read()
cv2.imshow("窗口名字",img)
if cv2.waitKey(1) & 0xFF == ord('q'): #延时或者按键q按下,视频结束
break
import cv2
cap = cv2.VideoCapture(0)#0表示电脑自带的摄像头
cap.set(3,640)#3:视频窗的宽度
cap.set(4,480)#4:视频窗的高度
cap.set(10,100)#10:图像的亮度
while True:
success,img = cap.read()
cv2.imshow("",img)
if cv2.waitKey(1) & 0xFF ==ord('q'):
break
设置的参数表如下:其中数字可以用后面的字符串进行表示。
包括直线、矩形、圆形等等。
import cv2
import numpy as np
img = np.zeros((512,512))#窗口全部为黑色填充,0:黑色 零矩阵上为1的话,就表示为被黑色填充
img = np.zeros((512,512,3),np.uint8)#如果添加其他的颜色,需要开启3个通道RGB。
# img[:] = 255,0,0#由于[]中没有限制,所以说整个的框是全蓝
# img[300:500,100:300] = 255,0,0#限定蓝色框的范围,第一部分为高度(竖着方向)从像素300到500,第二部分为宽度(横着方向)从像素100到300
"""
绘制直线线段
对角线的话需要在终点的位置坐标设置为(img.shape[1],img.shape[0])前面部分为宽度、后部分为高度
"""
cv2.line(img,(0,0),(500,500),(0,200,255),3)#绘制线段,起点,终点,线段的颜色,线段的厚度
"""
绘制矩形
"""
cv2.rectangle(img,(0,0),(50,50),(255,230,231),3)#绘制矩形,属性包括:来源、矩形的起点、矩形的终点、颜色、线条的厚度(全部填充的话:cv2.FILLED)
cv2.imshow("img",img)
cv2.waitKey(0)