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()
相关推荐
兰亭妙微30 分钟前
用户体验的真正边界在哪里?对的 “认知负荷” 设计思考
人工智能·ux
13631676419侯35 分钟前
智慧物流与供应链追踪
人工智能·物联网
TomCode先生37 分钟前
MES 离散制造核心流程详解(含关键动作、角色与异常处理)
人工智能·制造·mes
zd2005721 小时前
AI辅助数据分析和学习了没?
人工智能·学习
johnny2331 小时前
强化学习RL
人工智能
乌恩大侠1 小时前
无线网络规划与优化方式的根本性变革
人工智能·usrp
放羊郎1 小时前
基于萤火虫+Gmapping、分层+A*优化的导航方案
人工智能·slam·建图·激光slam
王哈哈^_^1 小时前
【数据集+完整源码】水稻病害数据集,yolov8水稻病害检测数据集 6715 张,目标检测水稻识别算法实战训推教程
人工智能·算法·yolo·目标检测·计算机视觉·视觉检测·毕业设计
SEOETC1 小时前
数字人技术:虚实交融的未来图景正在展开
人工智能
boonya2 小时前
从阿里云大模型服务平台百炼看AI应用集成与实践
人工智能·阿里云·云计算