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()
相关推荐
顾北122 小时前
MCP协议实战|Spring AI + 高德地图工具集成教程
人工智能
wfeqhfxz25887822 小时前
毒蝇伞品种识别与分类_Centernet模型优化实战
人工智能·分类·数据挖掘
中杯可乐多加冰2 小时前
RAG 深度实践系列(七):从“能用”到“好用”——RAG 系统优化与效果评估
人工智能·大模型·llm·大语言模型·rag·检索增强生成
珠海西格电力科技2 小时前
微电网系统架构设计:并网/孤岛双模式运行与控制策略
网络·人工智能·物联网·系统架构·云计算·智慧城市
FreeBuf_2 小时前
AI扩大攻击面,大国博弈引发安全新挑战
人工智能·安全·chatgpt
weisian1513 小时前
进阶篇-8-数学篇-7--特征值与特征向量:AI特征提取的核心逻辑
人工智能·pca·特征值·特征向量·降维
Java程序员 拥抱ai4 小时前
撰写「从0到1构建下一代游戏AI客服」系列技术博客的初衷
人工智能
186******205314 小时前
AI重构项目开发全流程:效率革命与实践指南
人工智能·重构
森之鸟4 小时前
多智能体系统开发入门:用鸿蒙实现设备间的AI协同决策
人工智能·harmonyos·m
铁蛋AI编程实战4 小时前
大模型本地轻量化微调+端侧部署实战(免高端GPU/16G PC可运行)
人工智能·架构·开源