Opencv学习笔记

一、Introduction

1、二值图像:黑与白

二、

1、图片的显示

注意:如果在使用的过程中,对图片进行处理后,显示的图片的大小过大可以在进行如下操作。

cv2.namedWindow("名称",0)
cv2.imshow("名称",图片来源)

PS:两者的名称要一致。

1.1显示已拍摄的图片

1.2图片灰度显示

将图片灰度设置,代码如下:

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)

1.3图片模糊化

import cv2
img = cv2.imread("图片路径")
imgblur = cv2.GaussianBlur(img,(7,7),0)#模糊函数
cv2.imshow("imgblur"imgblur)
cv2.waitKey(0)

对于模糊函数做一些属性的解释说明:

 src:表示需要处理的图片

ksize:内核大小,High和Weigh都是奇数

其他的设置为0即可。

Opencv学习笔记_第1张图片

1.4图片的边缘检测

采取图片的轮廓,使用下面的函数

imgCanny = cv2.Canny(img,100,100)#img:处理图片 100,100是处理的阈值大小

阈值的取值:

低于阈值1的像素点会被认为不是边缘;
高于阈值2的像素点会被认为是边缘;
在阈值1和阈值2之间的像素点,若与第2步得到的边缘像素点相邻,则被认为是边缘,否则被认为不是边缘。

边缘定于为颜色、亮度等的急剧变化

1.5图片膨胀(边缘进行变厚)

因为以下的函数会使用到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:核函数只是用来计算映射到高维空间之后的内积的一种简便方法。

迭代的次数越多实际的边缘变厚的效果就越明显。

1.6图片侵蚀

import cv2
imgEroded = cv2.erode(imgDialation,kernel,iterations=1)

cv2.namedWindows("imgEroded",0)
cv2.imshow("imgEroded",imgEroded)

该图片的侵蚀是在原来图片膨胀的基础上进行处理的,代码中的imgEroded则是上面1.4膨胀后的图片。

1.7总代码汇总

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.8调整图片的大小

1、首先查询图片的大小

2、利用修改图片大小的函数进行指定修改

imgResize = cv2.resize("修改的图片",(宽,高))#修改图片大小的函数
print(imgResize.shape)#输出图片的大小

1.9裁剪图片

在原有的图片上进行特定的裁剪。注意:裁剪的函数与调整图片大小的函数数字参数进行区别开。

imgCropped = img[0:200,300:500]#切割裁取特定的图片的大小,前面是高度(竖着为高),后面的是宽度(横着为宽)。也就是从高度0到高度200;宽度300到500地方停止

1.10代码汇总(1.8-1.9)

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)

2、视频捕捉对象

由于视频是由图片一帧一帧的组合而成的,所以使用一个循环来解决视频展示的问题

2.1处理拍摄好的视频

import cv2
cap = cv2.VideoCapture(“视频路径”)#绝对路径和相对路径
while True:#死循环,一直执行
    success,img = cap.read()
    cv2.imshow("窗口名字",img)
    if cv2.waitKey(1) & 0xFF == ord('q'): #延时或者按键q按下,视频结束
        break
        

2.2处理摄像头的视频

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

设置的参数表如下:其中数字可以用后面的字符串进行表示。

Opencv学习笔记_第2张图片

三、绘制图形

包括直线、矩形、圆形等等。

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)

你可能感兴趣的:(opencv,学习,计算机视觉)