opencv —python
2026/4/24 19:42:23 网站建设 项目流程

一、chapter 1

导入图片

import cv2 print("Package Imported") img=cv2.imread("1.jpg") cv2.imshow("Output",img) #窗口的名称,图像的名字 cv2.waitKey(0)

导入视频

cap=cv2.VideoCapture("1.mp4") while True: success,img=cap.read() cv2.imshow("Video",img) if cv2.waitKey(1) & 0xff==ord('q'): break

使用摄像头

import cv2 #cv2代表计算机视觉 print("Package Imported") cap=cv2.VideoCapture(0) #摄像头ID #定义参数 cap.set(3,640) #ID 3 宽度 cap.set(4,480) #ID 4 高度 cap.set(10,100) #ID 10 亮度 while True: success,img=cap.read() cv2.imshow("Video",img) if cv2.waitKey(1) & 0xff==ord('q'): break

二、Basic Function

import 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, iterations=1) #边缘膨胀 imgErode = cv2.erode(imgDilation, kernel, iterations=1) #边缘腐蚀 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(颜色空间转换)

    参数 1:img→ 输入的原始图像(彩色图)

    参数 2:cv2.COLOR_BGR2GRAY→ 转换模式:BGR 彩色 → 灰度图(OpenCV 读取图片默认是 BGR 顺序,不是 RGB)

    作用:把彩色图变成黑白灰度图,方便边缘检测。


    imgBlur = cv2.GaussianBlur(imgGray, (5, 5), 0) #高斯模糊

    函数:GaussianBlur(高斯模糊 / 降噪)

    参数 1:imgGray→ 输入的灰度图

    参数 2:(5, 5)→ 模糊核大小(必须是奇数:3,5,7...)数字越大 → 模糊越强

    参数 3:0→ 高斯核标准差(设为 0 表示自动计算)一般直接写 0 就行。

    作用:去掉噪点,让边缘检测更干净。


    imgCanny = cv2.Canny(imgBlur, 50, 150) #边缘检测

    函数:Canny(经典边缘检测)

    参数 1:imgBlur→ 输入模糊后的灰度图

    参数 2:50低阈值(minVal)低于这个值的像素 → 直接丢弃

    参数 3:150高阈值(maxVal)高于这个值的像素 → 判定为强边缘介于 50~150 之间 → 只有连接强边缘才保留

    口诀:数值越小 → 边缘越多数值越大 → 边缘越干净


    imgDilation = cv2.dilate(imgCanny, kernel, iterations=1)

    函数:dilate(膨胀 → 边缘变粗)

    参数 1:imgCanny→ 输入的边缘图

    参数 2:kernel→ 膨胀用的结构核(你定义的 3×3 全 1 矩阵)

    参数 3:iterations=1→ 膨胀执行次数次数越大 → 边缘越粗

    作用:把细的、断开的边缘变粗、连上。


    imgErode = cv2.erode(imgDilation, kernel, iterations=1)

    函数:erode(腐蚀 → 边缘变细)

    参数 1:imgDilation→ 膨胀后的图

    参数 2:kernel→ 结构核(3×3)

    参数 3:iterations=1→ 腐蚀执行次数次数越大 → 边缘越细

    作用:把膨胀变粗的边缘收细一点,让边缘更干净、平滑。


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.裁剪图片

imgCropped=img[0:200,200:500] cv2.imshow("Image Cropped",imgCropped)
imgCropped = img[ 高度范围 : 宽度范围 ] #格式: img[ 起始行 : 结束行 , 起始列 : 结束列 ]

四、Shape And Texts

创建黑色画布

import cv2 import numpy as np img=np.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代表彩色(BGR)
  • np.uint8是颜色数值类型(0~255)

图形+文字

import cv2 import numpy as np img=np.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), 线条粗细)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询