如何开发一个Python程序,实现自动检测物体颜色的鉴黄功能?

2026-05-26 14:041阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计701个文字,预计阅读时间需要3分钟。

如何开发一个Python程序,实现自动检测物体颜色的鉴黄功能?

[()开头的准备+借助python和OpenCV通过图像相减的方法找到动态物体,然后根据像素值的平均大小判断其中的颜色。+ 首先我们使用的库有cv2,numpy,collections,time。其中导入模块的代码为:]

[](()开始前的准备


借助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(c)

如何开发一个Python程序,实现自动检测物体颜色的鉴黄功能?

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(c)

if sum > maxsum:

maxsum = sum

color = d

return color

[](()图片相减的办法


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

本文共计701个文字,预计阅读时间需要3分钟。

如何开发一个Python程序,实现自动检测物体颜色的鉴黄功能?

[()开头的准备+借助python和OpenCV通过图像相减的方法找到动态物体,然后根据像素值的平均大小判断其中的颜色。+ 首先我们使用的库有cv2,numpy,collections,time。其中导入模块的代码为:]

[](()开始前的准备


借助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(c)

如何开发一个Python程序,实现自动检测物体颜色的鉴黄功能?

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(c)

if sum > maxsum:

maxsum = sum

color = d

return color

[](()图片相减的办法


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