opencv颜色识别项目:识别水果

识别图中的葡萄橙子柠檬

分段制作

python 复制代码
import numpy as np
import cv2

#读取任务图片
ImForRead = R"D:\AAAproject\PYproject\assign.jpg"
img = cv2.imread(ImForRead, cv2.IMREAD_UNCHANGED)
cv2.imshow("img",img)
hsv_img= cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

#检查是否正常显示
# cv2.imshow("assign",img)
# cv2.waitKey()


###葡萄部分
#生成葡萄图像
hsv_grape_min=np.zeros(img.shape,np.uint8)
hsv_grape_max=np.zeros(img.shape,np.uint8)
#设置紫色参数,确保葡萄被识别
hsv_grape_min[:,:,0]=90
hsv_grape_min[:,:,1]=80
hsv_grape_min[:,:,2]=50
hsv_grape_max[:,:,0]=155
hsv_grape_max[:,:,1]=255
hsv_grape_max[:,:,2]=230
bgr_grape_min=cv2.cvtColor(hsv_grape_min, cv2.COLOR_HSV2BGR)
bgr_grape_max=cv2.cvtColor(hsv_grape_max, cv2.COLOR_HSV2BGR)
#检验是否正常显示
# cv2.imshow("grape_min",bgr_grape_min)
# cv2.imshow("grape_max",bgr_grape_max)
# cv2.waitKey(0)
#生成葡萄的掩膜并显示
grape_mask=cv2.inRange(hsv_img,hsv_grape_min,hsv_grape_max)
img_grape=cv2.bitwise_and(hsv_img,hsv_img,mask=grape_mask)
bgr_grape=cv2.cvtColor(img_grape, cv2.COLOR_HSV2BGR)
cv2.imshow("grape",bgr_grape)

###橙子部分
hsv_orange_min=np.zeros(img.shape,np.uint8)
hsv_orange_max=np.zeros(img.shape,np.uint8)
#设置橙色参数,确保橙子被识别
hsv_orange_min[:,:,0]=5
hsv_orange_min[:,:,1]=150
hsv_orange_min[:,:,2]=160
hsv_orange_max[:,:,0]=10
hsv_orange_max[:,:,1]=255
hsv_orange_max[:,:,2]=255
bgr_orange_min=cv2.cvtColor(hsv_orange_min, cv2.COLOR_HSV2BGR)
bgr_orange_max=cv2.cvtColor(hsv_orange_max, cv2.COLOR_HSV2BGR)
#检验是否正常显示
# cv2.imshow("orange_min",bgr_orange_min)
# cv2.imshow("orange_max",bgr_orange_max)
# cv2.waitKey(0)
#生成橙子的掩膜
orange_mask=cv2.inRange(hsv_img,hsv_orange_min,hsv_orange_max)
img_orange=cv2.bitwise_and(hsv_img,hsv_img,mask=orange_mask)
bgr_orange=cv2.cvtColor(img_orange, cv2.COLOR_HSV2BGR)
cv2.imshow("orange",bgr_orange)
cv2.waitKey(0)

包装成函数制作

python 复制代码
import numpy as np
import cv2


#读取任务图片
ImForRead = R"D:\AAAproject\PYproject\assign.jpg"
img = cv2.imread(ImForRead, cv2.IMREAD_UNCHANGED)
cv2.imshow("img",img)
hsv_img= cv2.cvtColor(img, cv2.COLOR_BGR2HSV)


def create_fruit_mask(h_min, h_max, s_min, s_max, v_min, v_max, fruit_name):
    """
    根据HSV范围创建水果掩膜,并生成相关全局变量。

    参数:
    h_min, h_max: Hue 的最小和最大值
    s_min, s_max: Saturation 的最小和最大值
    v_min, v_max: Value 的最小和最大值
    fruit_name: 水果名称(字符串),用于生成变量名
    """
    # 确保 hsv_img 已在全局作用域中定义
    global hsv_img, img

    # 创建该水果的最小和最大HSV阈值图像(与hsv_img同形状)
    hsv_min = np.zeros(hsv_img.shape, dtype=np.uint8)
    hsv_max = np.zeros(hsv_img.shape, dtype=np.uint8)

    hsv_min[:, :, 0] = h_min
    hsv_min[:, :, 1] = s_min
    hsv_min[:, :, 2] = v_min

    hsv_max[:, :, 0] = h_max
    hsv_max[:, :, 1] = s_max
    hsv_max[:, :, 2] = v_max

    # 将这些数组作为全局变量存储,变量名基于 fruit_name
    globals()[f'hsv_{fruit_name}_min'] = hsv_min
    globals()[f'hsv_{fruit_name}_max'] = hsv_max

    # 创建掩膜(使用HSV图像和HSV阈值)
    mask = cv2.inRange(hsv_img, hsv_min, hsv_max)
    globals()[f'{fruit_name}_mask'] = mask

    # 应用掩膜提取水果区域(在HSV空间)
    img_fruit_hsv = cv2.bitwise_and(hsv_img, hsv_img, mask=mask)
    globals()[f'img_{fruit_name}'] = img_fruit_hsv  # 存储HSV结果

    # 转换回BGR以便显示
    img_fruit_bgr = cv2.cvtColor(img_fruit_hsv, cv2.COLOR_HSV2BGR)
    globals()[f'bgr_{fruit_name}'] = img_fruit_bgr

    # 显示结果
    # cv2.imshow(f'{fruit_name}', img_fruit_bgr)
    # cv2.waitKey(0)
    # cv2.destroyAllWindows()
create_fruit_mask(90, 155, 80, 255, 50, 230, 'grape')
create_fruit_mask(5, 10, 150, 255, 160, 255, 'orange')
create_fruit_mask(20, 25, 150, 255, 50, 255, 'lemon')
# cv2.imshow("orange", bgr_orange)
# cv2.imshow("grape", bgr_grape)
# cv2.imshow("lemon", bgr_lemon)
fruits=cv2.bitwise_or(bgr_orange,bgr_grape)
fruits=cv2.bitwise_or(fruits,bgr_lemon)
cv2.imshow("fruits", fruits)
cv2.waitKey(0)
cv2.destroyAllWindows()
相关推荐
智驱力人工智能1 小时前
工厂智慧设备检测:多模态算法提升工业安全阈值
人工智能·算法·安全·边缘计算·智慧工厂·智能巡航·工厂设备检测
计算机sci论文精选2 小时前
ECCV 2024 论文解读丨具身智能、机器人研究最新突破创先点分享合集
人工智能·科技·深度学习·计算机视觉·机器人·cvpr
大模型真好玩3 小时前
深入浅出LangChain AI Agent智能体开发教程(八)—LangChain接入MCP实现流程
人工智能·python·mcp
R-G-B3 小时前
【15】OpenCV C++实战篇——fitEllipse椭圆拟合、 Ellipse()画椭圆
c++·人工智能·opencv·fitellipse椭圆拟合·ellipse画椭圆·椭圆拟合·绘制椭圆
飞哥数智坊3 小时前
Trae vs Cursor:深度体验 Trae 一个月后,我的真实感受
人工智能·cursor·trae
云布道师3 小时前
秒懂边缘云|1分钟了解边缘安全加速 ESA
人工智能·安全·阿里云·ai·云计算·云布道师
2501_924731474 小时前
城市路口识别准确率↑31%!陌讯时空建模算法在交通拥堵识别中的突破
人工智能·算法·目标检测·计算机视觉·目标跟踪
m0_616330455 小时前
Day 40 训练和测试的规范写法
人工智能·深度学习·机器学习
数据饕餮5 小时前
Pytorch深度学习框架实战教程-番外篇05-Pytorch全连接层概念定义、工作原理和作用
人工智能·pytorch·深度学习