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()
相关推荐
0xR3lativ1ty2 分钟前
每周AI工具新动态
人工智能
jerryinwuhan4 分钟前
面向产业带与中小企业数字化转型的电商运营人才培养模式
大数据·人工智能
Drgfd12 分钟前
智造赋能品控:汪进进以精益生产,夯实质量制造底座
人工智能·制造
米小虾22 分钟前
"Chat is dead":OpenAI 正在杀死的不是聊天,是整个 AI 交互范式
人工智能·openai
冬奇Lab26 分钟前
Agent 系列(18):成本与性能优化——省钱且更快
人工智能·llm·agent
Hefei GlobefishAI39 分钟前
合肥合豚AI硬件方案:专为智能售货柜厂商定制的无人零售接口套件
人工智能·零售·自动售货机·无人零售硬件·ai硬件方案·智能售货柜·接口套件
冬奇Lab1 小时前
每日一个开源项目(第127篇):PM Skills Marketplace - 把顶级产品方法论塞进 AI Agent
人工智能·开源·资讯
吴佳浩1 小时前
Hermes vs OpenClaw:基于源码的 Agent Loop 全面分析
人工智能·llm·agent
AI袋鼠帝1 小时前
腾讯出手了!彻底入局企业级Agent。
人工智能
和平宇宙1 小时前
AI笔记005. hermes-DeepSeek V4 Pro, 128K上下文引发的探索
前端·人工智能·笔记