【AIMB-2210】实现边缘检测
要实现边缘检测,需要安装一些必要的库:1、安装opencv:
```
sudo apt install libopencv-dev python3-opencv
```
安装好后验证:
```
lugl@lugl:~$ python3 -c "import cv2; print(cv2.__version__)"
4.12.0
```
2、安装四个依赖库
- numpy
- request
- opencv-python
- opencv-contrib-python
使用pip安装即可
3、编写测试代码如下:
```
import cv2
import requests
import numpy as np
url = 'http://192.168.3.117/stream'# UNIHIKER K10的IP地址
cv2.namedWindow("live transmission", cv2.WINDOW_AUTOSIZE)# 创建一个窗口用于显示实时图像
# 启动 HTTP 请求获取视频流
try:
response = requests.get(url, stream=True, timeout=10)
print("Connected to stream")
img_data = b''# 用于存储接收到的图像数据
# 按块读取数据
for chunk in response.iter_content(chunk_size=1024):
if chunk:
img_data += chunk# 将接收到的数据累加到 img_data 中
# 判断是否接收到完整的 JPEG 数据
start_idx = img_data.find(b'\xff\xd8')# 查找 JPEG 开始标志
end_idx = img_data.find(b'\xff\xd9') # 查找 JPEG 结束标志
if start_idx != -1 and end_idx != -1:
jpg_data = img_data# 提取出完整的 JPEG 数据
# 转换为 NumPy 数组
img_np = np.frombuffer(jpg_data, dtype=np.uint8)
img = cv2.imdecode(img_np, cv2.IMREAD_COLOR)# 解码 JPEG 图像数据
if img is not None:
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 将图像转换为灰度图像
canny = cv2.Canny(cv2.GaussianBlur(gray, (11, 11), 0), 30, 150, 3)# 使用Canny算法进行边缘检测
dilated = cv2.dilate(canny, (1, 1), iterations=2)# 对边缘图像进行膨胀操作
contours, _ = cv2.findContours(dilated.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)# 查找轮廓
cv2.drawContours(img, contours, -1, (0, 255, 0), 2)# 在原始图像上绘制轮廓
cv2.imshow("mit contour", canny)# 显示边缘检测结果图像
cv2.imshow("live transmission", img)# 显示实时图像
# 按下 'q' 键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 清除已处理的数据
img_data = img_data# 移除已处理的图像数据部分
else:
print("No data received!")
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
cv2.destroyAllWindows()
```
基中url = 'http://192.168.3.117/stream'# UNIHIKER K10的IP地址是我的一个行空板的无线摄像头的网页视频地址。
4、执行效果:
!(https://www.eefocus.com/forum/data/attachment/forum/202510/07/094753qwfawwlp1qmskm2f.png)
界面非常流畅。
页:
[1]