opencv —python
一、chapter 1导入图片import cv2 print(Package Imported) imgcv2.imread(1.jpg) cv2.imshow(Output,img) #窗口的名称图像的名字 cv2.waitKey(0)导入视频capcv2.VideoCapture(1.mp4) while True: success,imgcap.read() cv2.imshow(Video,img) if cv2.waitKey(1) 0xfford(q): break使用摄像头import cv2 #cv2代表计算机视觉 print(Package Imported) capcv2.VideoCapture(0) #摄像头ID #定义参数 cap.set(3,640) #ID 3 宽度 cap.set(4,480) #ID 4 高度 cap.set(10,100) #ID 10 亮度 while True: success,imgcap.read() cv2.imshow(Video,img) if cv2.waitKey(1) 0xfford(q): break二、Basic Functionimport cv2 #cv2代表计算机视觉 import numpy as np #处理矩阵 print(Package Imported) kernel np.ones((3,3),np.uint8) img cv2.imread(D:/ASight/image/1.jpg) # 等比例缩小新增 scale 0.3 # 缩小到 50%想更小就改 0.4、0.3 width int(img.shape[1] * scale) height int(img.shape[0] * scale) img cv2.resize(img, (width, height)) # 执行缩小 # imgGray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #灰度处理 imgBlur cv2.GaussianBlur(imgGray, (5, 5), 0) #高斯模糊 imgCanny cv2.Canny(imgBlur, 50, 150) #边缘检测 #边缘检测中存在间隙或者连接不当时以此怎家边缘厚度 imgDilation cv2.dilate(imgCanny, kernel, iterations1) #边缘膨胀 imgErode cv2.erode(imgDilation, kernel, iterations1) #边缘腐蚀 cv2.imshow(Original, imgGray) cv2.imshow(Blur, imgBlur) cv2.imshow(Canny, imgCanny) cv2.imshow(Dilation, imgDilation) cv2.imshow(Erode, imgErode) cv2.waitKey(0) cv2.destroyAllWindows()代码参数详解imgGray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #灰度处理函数cvtColor颜色空间转换参数 1img→ 输入的原始图像彩色图参数 2cv2.COLOR_BGR2GRAY→ 转换模式BGR 彩色 → 灰度图OpenCV 读取图片默认是 BGR 顺序不是 RGB作用把彩色图变成黑白灰度图方便边缘检测。imgBlur cv2.GaussianBlur(imgGray, (5, 5), 0) #高斯模糊函数GaussianBlur高斯模糊 / 降噪参数 1imgGray→ 输入的灰度图参数 2(5, 5)→ 模糊核大小必须是奇数3,5,7...数字越大 → 模糊越强参数 30→ 高斯核标准差设为 0 表示自动计算一般直接写 0 就行。作用去掉噪点让边缘检测更干净。imgCanny cv2.Canny(imgBlur, 50, 150) #边缘检测函数Canny经典边缘检测参数 1imgBlur→ 输入模糊后的灰度图参数 250→低阈值minVal低于这个值的像素 → 直接丢弃参数 3150→高阈值maxVal高于这个值的像素 → 判定为强边缘介于 50~150 之间 → 只有连接强边缘才保留口诀数值越小 → 边缘越多数值越大 → 边缘越干净imgDilation cv2.dilate(imgCanny, kernel, iterations1)函数dilate膨胀 → 边缘变粗参数 1imgCanny→ 输入的边缘图参数 2kernel→ 膨胀用的结构核你定义的 3×3 全 1 矩阵参数 3iterations1→ 膨胀执行次数次数越大 → 边缘越粗作用把细的、断开的边缘变粗、连上。imgErode cv2.erode(imgDilation, kernel, iterations1)函数erode腐蚀 → 边缘变细参数 1imgDilation→ 膨胀后的图参数 2kernel→ 结构核3×3参数 3iterations1→ 腐蚀执行次数次数越大 → 边缘越细作用把膨胀变粗的边缘收细一点让边缘更干净、平滑。Opencv Convention 惯例1.调整大小import cv2 import numpy as np img cv2.imread(Resources/lambo.png) print(img.shape) # 打印原图的尺寸信息 (高度, 宽度, 通道数) imgResize cv2.resize(img, (1000, 500)) # 对图片进行缩放修改为 宽1000px高500px print(imgResize.shape) cv2.imshow(Image, img) cv2.imshow(Image Resize, imgResize) cv2.waitKey(0)1 图片缩放核心函数imgResize cv2.resize(img, (1000, 500))函数cv2.resize(原始图片, (目标宽度, 目标高度))⚠️超级重点易错点函数参数括号里的顺序先宽、后高(宽度width, 高度height)而上面img.shape输出顺序是先高、后宽(高度, 宽度, 通道)2打印缩放后尺寸print(imgResize.shape)打印缩放之后图片的(高度, 宽度, 通道)用来验证缩放是否成功。2.裁剪图片imgCroppedimg[0:200,200:500] cv2.imshow(Image Cropped,imgCropped)imgCropped img[ 高度范围 : 宽度范围 ] #格式 img[ 起始行 : 结束行 , 起始列 : 结束列 ]四、Shape And Texts创建黑色画布import cv2 import numpy as np imgnp.zeros((300,300,3),np.uint8) print(img) img[:]255,0,0 cv2.imshow(Image,img) cv2.waitKey(0)img np.zeros((512,512,3), np.uint8) #np.zeros((高度, 宽度, 通道数), np.uint8)创建一张512×512 大小的黑色图片3代表彩色BGRnp.uint8是颜色数值类型0~255图形文字import cv2 import numpy as np imgnp.zeros((512,512,3),np.uint8) #print(img) #img[:]255,0,0 cv2.line(img,(0,0),(img.shape[1],img.shape[0]),(0,255,5),2) #直线 cv2.rectangle(img,(0,0),(300,300),(100,125,200),cv2.FILLED) #矩形 cv2.circle(img,(300,300),100,(0,0,255),2) #圆 cv2.putText(img,Opencv,(300,100),cv2.FONT_HERSHEY_PLAIN,3,(255,255,255),2) #文字 cv2.imshow(Image,img) cv2.waitKey(0)1. 创建全黑图像np.zeros(shape, dtype)2. 画直线cv2.line(画布, 起点(x,y), 终点(x,y), 颜色(B,G,R), 线条粗细)3. 画矩形cv2.rectangle(画布, 左上角(x,y), 右下角(x,y), 颜色(B,G,R), 线条粗细/填充)4. 画圆形cv2.circle(画布, 圆心(x,y), 半径, 颜色(B,G,R), 线条粗细/填充)5. 绘制文字cv2.putText(img, text, org, fontFace, fontScale, color, thickness)cv2.putText(画布, 文字, 起始坐标(x,y), 字体, 字号, 颜色(B,G,R), 线条粗细)