当前位置 : 主页 > 编程语言 > python >

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

来源:互联网 收集:自由互联 发布时间:2022-06-18
[](()开始前的准备 借助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)

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函数对图片像素值作差找到动态物体,接着讲像素值相减非零的部分用矩形框圈出来。

上一篇:Python基础教程:7个经典程序示例
下一篇:没有了
网友评论