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

Python“鉴黄”小程序,自动识别检测物体的颜色

文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者: 李秋键

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入

开始前的准备


借助python和OpenCV通过图片相减的方法找到动态物体,然后根据像素值的大小判断其中的均值颜色。

首先我们使用的库有cv2,numpy,collections,time。其中导入模块的代码如下:

import cv2

import numpy as np

import collections

import time

下面是读取摄像头:

camera = cv2.VideoCapture(0)

做一些开始前的准备,包括循环次数,摄像头内容读入,保存上一帧的图片作为对比作差找到动态物体,然后定义框架的长和宽。

firstframe = None

a=0

ret0,frame0 = camera.read()

cv2.imwrite(“1.jpg”,frame0)

x, y, w, h = 10,10,100,100

下面是定义颜色的部分代码,比如定义的黑色,可以参照hsv表进行拓展,如图所示

在这里插入图片描述

然后可以知道黑色的最低值为0,0,0,最大值为180,255,46然后建立数组存储颜色数据,通过字典达到映射效果。

处理图片

def get_color(frame):

print(‘go in get_color’)

hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

maxsum = -100

color = None

color_dict = getColorList()

for d in color_dict:

mask = cv2.inRange(frame, color_dict[d][0], color_dict[d][1])

cv2.imwrite(d + ‘.jpg’, mask)

binary = cv2.threshold(mask, 127, 255, cv2.THRESH_BINARY)[1]

binary = cv2.dilate(binary, None, iterations=2)

img, cnts, hiera = cv2.findContours(binary.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

sum = 0

for c in cnts:

sum += cv2.contourArea©

if sum > maxsum:

maxsum = sum

color = d

return color

图像处理


紧接着是图像处理,其中包括转为灰度图,读取颜色字典,然后腐化膨胀操作。

处理图片

def get_color(frame):

print(‘go in get_color’)

hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

maxsum = -100

color = None

color_dict = getColorList()

for d in color_dict:

mask = cv2.inRange(frame, color_dict[d][0], color_dict[d][1])

cv2.imwrite(d + ‘.jpg’, mask)

binary = cv2.threshold(mask, 127, 255, cv2.THRESH_BINARY)[1]

binary = cv2.dilate(binary, None, iterations=2)

img, cnts, hiera = cv2.findContours(binary.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

sum = 0

for c in cnts:

sum += cv2.contourArea©

if sum > maxsum:

maxsum = sum

color = d

return color

图片相减的办法


然后是图片相减找到动态物体的代码,每循环5次保存一次图片,时间是很短的不用担心。然后通过absdiff函数对图片像素值作差找到动态物体,接着讲像素值相减非零的部分用矩形框圈出来。

while True:

ret, frame = camera.read()

if not ret:

break

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

gray = cv2.GaussianBlur(gray, (21, 21), 0)

a=a+1

if a%5==0:

cv2.imwrite(“1.jpg”, frame)

firstframe=cv2.imread(“1.jpg”)

firstframe= cv2.cvtColor(firstframe, cv2.COLOR_BGR2GRAY)

firstframe= cv2.GaussianBlur(firstframe, (21, 21), 0)

frameDelta = cv2.absdiff(firstframe, gray)

thresh = cv2.threshold(frameDelta, 25, 255, cv2.THRESH_BINARY)[1]

thresh = cv2.dilate(thresh, None, iterations=2)

cnts= cv2.findContours(thresh.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

x, y, w, h = cv2.boundingRect(thresh)

frame = cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)

cv2.imshow(“frame”, frame)


http://www.kler.cn/a/535892.html

相关文章:

  • (苍穹外卖)项目结构
  • 【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter2-HTML 中的 JavaScript
  • go数据结构学习笔记
  • systemctl配置httpd服务
  • 数据分析系列--[11] RapidMiner,K-Means聚类分析(含数据集)
  • Oh3.2项目升级到Oh5.0(鸿蒙Next)具体踩坑记录(一)
  • 【数据结构】(5) ArrayList 顺序表
  • 确保数据一致性:RabbitMQ 消息传递中的丢失与重复问题详解
  • 如何查看:Buildroot所使用Linux的版本号、gcc交叉编译工具所使用的Linux的版本号、开发板上运行的Linux系统的版本号
  • 使用外骨骼灵活远程控制协作机器人案例
  • 如何利用Java爬虫获取商品销量详情实战指南
  • Spring Boot 自动装配机制深度解析
  • VUE之组件通信(二)
  • Git 分支管理策略与实践
  • 怎麼在Chrome中設置代理伺服器?
  • MySQL 进阶专题:索引(索引原理/操作/优缺点/B+树)
  • 责任链模式(Chain Responsibility)
  • 深度学习里面的而优化函数 Adam,SGD,动量法,AdaGrad 等 | PyTorch 深度学习实战
  • HbuilderX中,实现Gzip的两种方法
  • 【数据结构-Trie树】力扣720. 词典中最长的单词
  • android 打包AAR-引入资源layout-安卓封包
  • 网络计算机的五个组成部分
  • 2.5-数据结构:AVL树
  • DeepSeek 开源模型全解析(2024.1.1–2025.2.6)
  • 2025年2月6日(anaconda cuda 学习 基本命令)
  • 《ISO/SAE 21434-2021 道路汽车--网络安全工程》标准解读