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()
相关推荐
GISer_Jing11 分钟前
AI自动化工作流:智能驱动未来(升级研究生项目!!!)
人工智能·前端框架·自动化
草捏子11 分钟前
Agent Skills:让 AI 一次学会、永远记住的能力扩展方案
人工智能
NocoBase21 分钟前
【2.0 教程】第 1 章:认识 NocoBase ,5 分钟跑起来
数据库·人工智能·开源·github·无代码
后端小肥肠26 分钟前
OpenClaw实战|从识图到公众号内容自动化,我跑通了完整链路
人工智能·aigc·agent
Elastic 中国社区官方博客40 分钟前
快速 vs. 准确:衡量量化向量搜索的召回率
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索
qq_381338501 小时前
【技术日报】2026-03-18 AI 领域重磅速递
大数据·人工智能
NocoBase1 小时前
开源项目管理工具选型指南(2026年最新)
人工智能·开源·无代码
feasibility.1 小时前
AI 爬虫高手养成:Openclaw+Scrapling 手动部署 + 采集策略(以Walmart 电商平台为例)
人工智能·爬虫·科技·机器人·agi·openclaw·scrapling
程序员老猫1 小时前
前端菜鸡狂喜!DeepSeek+Gemini,嘴炮出完整博客方案
人工智能
AI周红伟2 小时前
周红伟:《OpenClaw安全防控:OpenClaw++Skills智能体安全部署、实操和企业应用实操》
人工智能·阿里云·云计算·腾讯云·openclaw