用python opencv设置界面,通过打开摄像头, 简单识别手机,水杯,书本 的代码(不用预训练模型),识别之后显示物品名称
时间: 2024-03-17 12:42:26 浏览: 76
通过摄像头识别。用笔画画,控制鼠标移动。opencv python
好的,我可以为您提供一个基本的代码框架,但是需要注意的是,这种简单的物品识别方法可能不够准确,因此建议您使用预训练模型或者更高级的物品识别算法来提高识别准确率。
首先,您需要安装OpenCV和numpy库。然后,您可以使用以下代码打开摄像头:
```python
import cv2
cap = cv2.VideoCapture(0) # 0表示默认摄像头,如果有多个摄像头可以传入1、2、3等
while True:
ret, frame = cap.read()
cv2.imshow('Camera', frame)
if cv2.waitKey(1) == ord('q'): # 按下q键退出
break
cap.release()
cv2.destroyAllWindows()
```
接下来,您需要定义一个函数来识别物品。以下是一个简单的示例函数,它可以检测手机、水杯和书本:
```python
import numpy as np
def detect_object(frame):
# 定义HSV颜色范围
lower_phone = np.array([0, 100, 100])
upper_phone = np.array([10, 255, 255])
lower_cup = np.array([20, 100, 100])
upper_cup = np.array([30, 255, 255])
lower_book = np.array([60, 100, 100])
upper_book = np.array([70, 255, 255])
# 将图像从BGR转换为HSV
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# 分别检测手机、水杯和书本
phone_mask = cv2.inRange(hsv, lower_phone, upper_phone)
cup_mask = cv2.inRange(hsv, lower_cup, upper_cup)
book_mask = cv2.inRange(hsv, lower_book, upper_book)
# 计算每个物品的轮廓
contours_phone, _ = cv2.findContours(phone_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours_cup, _ = cv2.findContours(cup_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours_book, _ = cv2.findContours(book_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 检测到手机
if len(contours_phone) > 0:
return 'Phone'
# 检测到水杯
elif len(contours_cup) > 0:
return 'Cup'
# 检测到书本
elif len(contours_book) > 0:
return 'Book'
# 没有检测到任何物品
else:
return 'None'
```
最后,您可以将这些代码整合到一起,以实现您的需求。以下是一个完整的示例代码:
```python
import cv2
import numpy as np
# 定义HSV颜色范围
lower_phone = np.array([0, 100, 100])
upper_phone = np.array([10, 255, 255])
lower_cup = np.array([20, 100, 100])
upper_cup = np.array([30, 255, 255])
lower_book = np.array([60, 100, 100])
upper_book = np.array([70, 255, 255])
# 定义物品名称和颜色
objects = {
'Phone': (255, 0, 0),
'Cup': (0, 255, 0),
'Book': (0, 0, 255),
'None': (0, 0, 0)
}
def detect_object(frame):
# 将图像从BGR转换为HSV
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# 分别检测手机、水杯和书本
phone_mask = cv2.inRange(hsv, lower_phone, upper_phone)
cup_mask = cv2.inRange(hsv, lower_cup, upper_cup)
book_mask = cv2.inRange(hsv, lower_book, upper_book)
# 计算每个物品的轮廓
contours_phone, _ = cv2.findContours(phone_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours_cup, _ = cv2.findContours(cup_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours_book, _ = cv2.findContours(book_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 检测到手机
if len(contours_phone) > 0:
return 'Phone'
# 检测到水杯
elif len(contours_cup) > 0:
return 'Cup'
# 检测到书本
elif len(contours_book) > 0:
return 'Book'
# 没有检测到任何物品
else:
return 'None'
cap = cv2.VideoCapture(0) # 0表示默认摄像头,如果有多个摄像头可以传入1、2、3等
while True:
ret, frame = cap.read()
object_name = detect_object(frame)
color = objects[object_name]
cv2.putText(frame, object_name, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, color, 2)
cv2.imshow('Camera', frame)
if cv2.waitKey(1) == ord('q'): # 按下q键退出
break
cap.release()
cv2.destroyAllWindows()
```
运行代码后,您将看到摄像头的实时图像,并且检测到的物品名称将显示在图像的左上角。
阅读全文