当前位置: 首页 > news >正文

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

识别图中的葡萄橙子柠檬

分段制作

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)

包装成函数制作

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_minhsv_min[:, :, 1] = s_minhsv_min[:, :, 2] = v_minhsv_max[:, :, 0] = h_maxhsv_max[:, :, 1] = s_maxhsv_max[:, :, 2] = v_max# 将这些数组作为全局变量存储,变量名基于 fruit_nameglobals()[f'hsv_{fruit_name}_min'] = hsv_minglobals()[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()

http://www.dtcms.com/a/323896.html

相关文章:

  • 复现论文《多无人机协同任务分配算法设计与实现》
  • js 实现 ajax 并发请求
  • selenium自动化测试速成
  • 腾讯云EdgeOne KV存储在游戏资源发布中的技术实践与架构解析
  • 嵌入式开发学习(第三阶段第四天 Linux系统开发)
  • 每日任务day0810:小小勇者成长记之武器精炼
  • Docker部署到实战
  • Java 大视界 -- Java 大数据机器学习模型在电商商品销量预测与库存精准管理中的应用(391)
  • Pytorch进阶-timm库-00快速开始
  • AI大模型 教师方向应用探索
  • 联合理解生成的关键拼图?腾讯发布X-Omni:强化学习让离散自回归生成方法重焕生机,轻松渲染长文本图像
  • 机械学习--DBSCAN 算法(附实战案例)
  • 基于梅特卡夫定律的开源链动2+1模式AI智能名片S2B2C商城小程序价值重构研究
  • Jenkins | 账号及权限管理
  • Python爬虫实战:研究Ruia框架,构建博客园文章采集系统
  • 【Elasticsearch入门到落地】16、RestClient查询文档-快速入门
  • AIStarter:全网唯一跨平台桌面AI管理工具,支持Windows、Mac和Linux一键部署
  • 滚动条开始滚动时,左侧导航固定,当左侧内容触底到footer时左侧内容取消固定并跟随滚动条滚动
  • ADK【4】内置前端调用流程
  • TDengine IDMP 快速体验(方式二 通过 docker)
  • 安全引导功能及ATF的启动过程(五)
  • Linux 虚拟机磁盘空间占满-全面清理方案
  • GoBy 工具联动 | GoBy AWVS 自动化漏扫工作流
  • [论文阅读] 人工智能 + 软件工程 | 大型语言模型对决传统方法:多语言漏洞修复能力大比拼
  • Kafka 生产者与消费者分区策略全解析:从原理到实践
  • 音视频学习(五十一):AAC编码器
  • Samba使用
  • java常见算法
  • 前端开发的奇技淫巧 --- 持续更新中
  • 《P3403 跳楼机》