摄像头质量检测

article/2025/11/7 6:28:29

文章目录

  • 项目场景:
  • 一、色偏:
  • 二、清晰度:
  • 三、两张图片的特征点对比:
  • 四、亮度:
  • 总结:

项目场景:

我们项目中使用的摄像头,在部署之后,有可能会遇到被人为遮挡、破坏,或者自然遮挡,再或者使用时间太长,摄像头已经有些损坏老化,拍摄的效果不好,导致我们的算法检测不到,需要检测的物品。人力排查又很麻烦,这里就写几个容易实现,检测效果还不错的小方法。

一、色偏:

1.检测色偏,将RGB图像转变到CIE Lab空间,其中L表示图像亮度,a表示图像红/绿分量,b表示图像黄/蓝分量。 通常存在色偏的图像,在a和b分量上的均值会偏离原点很远,方差也会偏小; 通过计算图像在a和b分量上的均值和方差,就可评估图像是否存在色偏。
2.当我们的摄像头被树叶或者其他的物品遮挡的时候,画面就只会出现一种颜色或者说是一种颜色在画面中占得比例很大,所以我们可以通过检测画面的色偏程度来实现判断摄像头有没有被遮挡。

def colour(self,img):img = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)l_channel, a_channel, b_channel = cv2.split(img)h, w, _ = img.shapeda = a_channel.sum() / (h * w) - 128db = b_channel.sum() / (h * w) - 128histA = [0] * 256histB = [0] * 256for i in range(h):for j in range(w):ta = a_channel[i][j]tb = b_channel[i][j]histA[ta] += 1histB[tb] += 1msqA = 0msqB = 0for y in range(256):msqA += float(abs(y - 128 - da)) * histA[y] / (w * h)msqB += float(abs(y - 128 - db)) * histB[y] / (w * h)import mathresult = math.sqrt(da * da + db * db) / math.sqrt(msqA * msqA + msqB * msqB)if result > 1:print("有异常,可能被遮挡,d/m是:", result)else:print("正常,d/m是:", result)

二、清晰度:

1.Laplace 清晰度检测利用拉普拉斯算子计算图片的二阶导数,反映图片的边缘信息,同样事物的图片,清晰度高的,相对应的经过拉普拉斯算子滤波后的图片的方差也就越大。
2.摄像头老化,损坏,被遮挡,清晰度都会变低。

def definition(self,img,definitionnum=1000):imgPath = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)imageVar = cv2.Laplacian(imgPath, cv2.CV_64F).var()if imageVar < definitionnum:print("有异常,清晰度的得分是:", imageVar)else:print("正常,清晰度的得分是:", imageVar)

三、两张图片的特征点对比:

1、提取关键点:关键点是一些十分突出的不会因光照、尺度、旋转等因素而消失的点,比如角点、边缘点、暗区域的亮点以及亮区域的暗点。此步骤是搜索所有尺度空间上的图像位置。通过高斯微分函数来识别潜在的具有尺度和旋转不变的兴趣点。
2、定位关键点并确定特征方向:在每个候选的位置上,通过一个拟合精细的模型来确定位置和尺度。关键点的选择依据于它们的稳定程度。然后基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向。 所有后面的对图像数据的操作都相对于关键点的方向、尺度和位置进行变换,从而提供对于这些变换的不变性。
3. 通过各关键点的特征向量,进行两两比较找出相互匹配的若干对特征点,建立景物间的对应关系。
4.这个方法需要保存一张,摄像头状态好的时候的一张图片,可以防止摄像头移位等。

def detectAndDescribe(self,image):# 将彩色图片转换成灰度图gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 建立SIFT生成器descriptor = cv2.xfeatures2d.SIFT_create()# 检测SIFT特征点,并计算描述子(kps, features) = descriptor.detectAndCompute(image, None)# 将结果转换成NumPy数组kps = numpy.float32([kp.pt for kp in kps])# 返回特征点集,及对应的描述特征return (kps, features)def matchKeypoints(self,kpsA, kpsB, featuresA, featuresB, ratio=0.75, reprojThresh=4.0,featurenum=400):# 建立暴力匹配器matcher = cv2.BFMatcher()# 使用KNN检测来自A、B图的SIFT特征匹配对,K=2rawMatches = matcher.knnMatch(featuresA, featuresB, 2)matches = []for m in rawMatches:# 当最近距离跟次近距离的比值小于ratio值时,保留此匹配对if len(m) == 2 and m[0].distance < m[1].distance * ratio:# 存储两个点在featuresA, featuresB中的索引值matches.append((m[0].trainIdx, m[0].queryIdx))ptsA = numpy.float32([kpsA[i] for (_, i) in matches])ptsB = numpy.float32([kpsB[i] for (i, _) in matches])# 计算视角变换矩阵(H, status) = cv2.findHomography(ptsA, ptsB, cv2.RANSAC, reprojThresh)# 返回结果point = 0for ((trainIdx, queryIdx), s) in zip(matches, status):# 当点对匹配成功时,画到可视化图上if s == 1:# 画出匹配对point = point + 1if point < featurenum:print("有异常,清晰度的得分是:", point)else:print("正常,清晰度的得分是:", point)def feature(self,img, path, filename,featurenumf=400):try:way = path + "/" + filenameimageB = cv2.imread(way)imageA = cv2.resize(img, dsize=(600, 500))imageB = cv2.resize(imageB, dsize=(600, 500))(kpsA, featuresA) = self.detectAndDescribe(imageA)(kpsB, featuresB) = self.detectAndDescribe(imageB)self.matchKeypoints(kpsA, kpsB, featuresA, featuresB,featurenum=featurenumf)print("\n")except:print("没有读取到图片")print("\n")

四、亮度:

1.亮度检测,计算图片在灰度图上的均值和方差,当存在亮度异常时,均值会偏离均值点(可以假设为128),方差也会偏小;通过计算灰度图的均值和方差,就可评估图像是否存在过曝光或曝光不足。
2.摄像头画面被遮挡亮度不会很高,摄像头损坏的话,画面也会出现大面积黑,而且上述的方法在夜晚效果都不好,我们可以考虑只在白天检测。

def intensity(self,img):gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)img_shape = gray_img.shapeheight, width = img_shape[0], img_shape[1]size = gray_img.size# 灰度图的直方图hist = cv2.calcHist([gray_img], [0], None, [256], [0, 256])# 计算灰度图像素点偏离均值(128)程序a = 0ma = 0# numpy.full 构造一个数组,用指定值填充其元素reduce_matrix = numpy.full((height, width), 128)shift_value = gray_img - reduce_matrixshift_sum = numpy.sum(shift_value)da = shift_sum / size# 计算偏离128的平均偏差for i in range(256):ma += (abs(i - 128 - da) * hist[i])m = abs(ma / size)# 亮度系数k = abs(da) / mif k[0] > 1:# 过亮if da > 0:print("过亮")else:print("过暗")else:print("亮度正常:", k)return 0

总结:

这些方法都是传统的方法,可以使用,而且简单方便,但是会有很多的限制,会出现各种误判。希望看到这篇文章的大佬和朋友们,如果你们有更好的方法,欢迎评论区交流!!!
我现在使用分类的算法做的,勉强可以用。
Alt


http://chatgpt.dhexx.cn/article/rWoxopUG.shtml

相关文章

谷歌再失华裔高管,AI 中国中心总裁李佳离职;树莓派新品发布

(给技术最前线加星标&#xff0c;每天看技术热点) 转自&#xff1a;开源中国、solidot、cnBeta、腾讯科技、快科技等 【技术资讯】 0、李飞飞之后谷歌再失华裔高管&#xff0c;谷歌 AI 中国中心总裁李佳离职创业 李飞飞离职50天后&#xff0c;另一位知名的谷歌AI华裔高管&#…

Visio2019 安装教程

Visio2019 32/64位可以帮助小伙伴们通过直观方式来轻松绘制出各种流程图&#xff0c;包括流程图、网络图、工程设计、组织结构图等&#xff0c;还可与他人协作实现无缝操作&#xff0c;友好的操作界面&#xff0c;专业化的设计工具&#xff0c;是您进行流程图设计的首选 Visio …

【安装教程】 【Visio2019】(附带安装包下载)

&#xff08;注意&#xff01;&#xff01;&#xff01; 安装完成之后&#xff0c;会覆盖原版的office&#xff01;&#xff01;&#xff01;&#xff09; https://pan.baidu.com/s/1uOcHz-fTEMsQhwU_yP6j71Q 一、Visio2019安装步骤 1.解压【Visio2019.rar】压缩包。&#xff…

Visio 2003软件安装教程

安装步骤&#xff1a; 1.解压安装包 2.打开解压后的文件夹&#xff0c;如图示&#xff1a; 3.密钥输入内容&#xff1a;GWH28-DGCMP-P6RC4-6J4MT-3HFDY &#xff0c;执行下一步 4.填写用户名和缩写&#xff0c;随便填写&#xff0c;下一步 5.如图&#xff1a;执行下一步 6.选择…

Visio科学图形包下载以及安装详细教程

Visio科学图形包&#xff0c;2013版本及以上可用&#xff0c;其中含有立体几何、解析几何、各种统计图表、三角函数、实验装置等。安装主要包含解压与导入模板两个步骤。以下安装教程不需要cmd中操作&#xff0c;简单方便&#xff0c;直接下载解压后的文件&#xff0c;导入即可…

Microsoft visio2010下载安装步骤图文教程

目录 概要 配置安装 总结 概要 应小伙伴们的要求&#xff0c;特畅谈Visio 2010iTunes地址&#xff0c;及Anantnag的装设教程如下★Microsoft Office Visio★ Office Visio 是office软件全系列中的负责绘制流程图和示意图的软件&#xff0c;是几款适于IT和商务人员就非…

Visio 安装与操作小结

&#x1f935; Author &#xff1a;Horizon Max ✨ 编程技巧篇&#xff1a;各种操作小结 &#x1f387; 机器视觉篇&#xff1a;会变魔术 OpenCV &#x1f4a5; 深度学习篇&#xff1a;简单入门 PyTorch &#x1f3c6; 神经网络篇&#xff1a;经典网络模型 &#x1f4bb; …

Visio2019安装

1.安装前查看系统多少位&#xff0c;根据系统下载相应的软件&#xff1b; 2.右键&#xff0c;管理员身份运行&#xff1b; 3.接下来等待下载完成&#xff1b; 4.完成后打开visio&#xff0c;点击“账户”查看是否激活&#xff1b; 5.激活成功安装结束。 6.若未激活可输入已有…

Visio 2019 专业版安装教程

参考 Visio 2019 Pro 激活方法 - 爱码网 (likecs.com) 在记事本中输入下面内容&#xff0c;保存为“.bat”文件&#xff0c;名字随意 echo off title Activate Microsoft Visio 2019&cls&echo &echo #Visio: Activating Microsoft software products for FREE wi…

visio2007安装教程_电脑安装Visio 2007的详细方法

电脑安装Visio 2007的详细方法 Microsoft Office Visio 2007是Office2007中的一部分&#xff0c;不过很多时候我们在windows系统电脑安装office的时候这一部分是没有默认安装的。很多人喜欢用Visio来画流程图&#xff0c;因为它便利快捷。那么电脑如何安装Visio Viewer 2007&am…

Visio2016 安装教程

Visio是office软件系列中的负责绘制流程图和示意图的软件&#xff0c;是一款便于IT和商务人员就复杂信息、系统和流程进行可视化处理、分析和交流的软件。使用具有专业外观的 Office Visio 图表&#xff0c;可以促进对系统和流程的了解&#xff0c;深入了解复杂信息并利用这些知…

visio2019安装教程

安装前先关闭杀毒软件和360卫士&#xff0c;注意安装路径不能有中文&#xff0c;安装包路径也不要有中文。 1.选中【Visio2019】压缩包&#xff0c;鼠标右击选择【解压到Visio2019】。 2.双击打开【Visio2019】文件夹。 3&#xff0e;双击打开【VisioPro2019Retail】镜像文件…

Visio2003安装教程

目录 一、软件下载 二、软件安装 一、软件下载 我放到我的百度网盘里啦~可以直接去里面下载&#xff0c;提取码为&#xff1a;5200。 请点击me、me、me&#xff01;&#xff01;&#xff01; 二、软件安装 1、根据上面的链接下载好 Visio2003_SP3.exe 文件后&#xff0c;双…

Office+Visio安装教程

OfficeProjectVisio安装教程 1&#xff0c;安装office Tool Plus&#xff08;这是一个方便的工具箱&#xff09; Office Tools Plus 官网下载地址&#xff1a; https://otp.landian.vip/zh-cn/ 下载下来以后解压 然后他会等待三秒左右打开以下窗口 2&#xff0c;卸载以…

Visio2013安装教程

资料下载&#xff1a; 下载安装包的链接如下&#xff0c;csdn上也有很多&#xff0c;也可以自己搜 链接&#xff1a;https://pan.baidu.com/s/15spASs91UlMnwkdCFB34jg?pwd7ahN 提取码&#xff1a;7ahN 一、下载visio2013源文件并进行安装 1.下载得到压缩包 2.解压第一步文件…

visio安装教程

1.安装包分享&#xff1a; 链接地址&#xff1a;点击此处 提取码&#xff1a;miao 文件解压&#xff1a; 3.解压后为&#xff1a; !在这里插入图片描述 点击setup !在这里插入图片描述 我接受此协议的条款&#xff0c;继续 5.选择自定义或者立即安装 一般选择立即安装…

visio如何安装-示例教程

目录 简介 安装过程 总结 简介 Visio是一款专业、流程图和图表软件。它可以通过图形化的方式帮助用户展示和分析各种流程和数据。Visio的功能非常强大&#xff0c;因此它广泛应用于各种领域&#xff0c;包括商业、工业和科技等。 首先&#xff0c;Visio拥有各种图表模板和元…

Office Visio 2019安装教程

哈喽&#xff0c;大家好。今天一起学习的是Visio 2019的安装&#xff0c;这是一个绘制流程图的软件&#xff0c;用有效的绘图表达信息&#xff0c;比任何文字都更加形象和直观。Office Visio 是office软件系列中负责绘制流程图和示意图的软件&#xff0c;便于IT和商务人员就复杂…

visio2021专业版安装包下载及教程 《流程图工具》

目录 简介 安装配置过程 总结 visio2021专业版简介 其 特色主要包含以下几个各方面&#xff1a; 规范化&#xff1a;Visio是这款专业人才的时序应用软件&#xff0c;其内建了大量的时序形和模版&#xff0c;囊括了各种相同种类的程序和非政府结构。使用者能透过Visio轻松地…

Visio从安装到使用完整版

文章目录 前言一、安装二、教程1.安装模具库2.如何制作模具库3.其他3.1 编辑上下标3.2 在visio中插入数学公式3.3 布尔运算3.4 设置任意两个点相连 总结 前言 最近需要使用Visio进行绘图&#xff0c;用了一个晚上学习了该软件&#xff0c;然后进行了一定的整理&#xff08;从安…