def
getImageVar
(
imgPath
)
:
image
=
cv2
.
imread
(
imgPath
)
img2gray
=
cv2
.
cvtColor
(
image
,
cv2
.
COLOR_BGR2GRAY
)
imageVar
=
cv2
.
Laplacian
(
img2gray
,
cv2
.
CV_64F
)
.
var
(
)
return
imageVar
imageVar
=
getImageVar
(
"tooth/15.jpg"
)
print
(
imageVar
)
2.亮度检测:
-
计算图片在灰度图上的均值和方差,当存在亮度异常时,均值会偏离均值点(可以假设为128),方差也会偏小;通过计算灰度图的均值和方差,就可评估图像是否存在过曝光或曝光不足。
import cv2
import numpy as np
img = cv2.imread('1.jpg')
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_shape = gray_img.shape
height, width = img_shape[0], img_shape[1]
size = gray_img.size
hist = cv2.calcHist([gray_img], [0], None, [256], [0, 256])
a = 0
ma = 0
reduce_matrix = np.full((height, width), 128)
shift_value = gray_img - reduce_matrix
shift_sum = np.sum(shift_value)
da = shift_sum / size
for i in range(256):
ma += (abs(i-128-da) * hist[i])
m = abs(ma / size)
k = abs(da) / m
print(k)
if k[0] > 1:
if da > 0:
print("过亮")
else:
print("过暗")
else:
print("亮度正常")
3.色偏检测:
-
将RGB图像转变到CIE L
a
b
空间,其中L
表示图像亮度,a
表示图像红/绿分量,b
表示图像黄/蓝分量。通常存在色偏的图像,在a
和b
分量上的均值会偏离原点很远,方差也会偏小;通过计算图像在a
和b
分量上的均值和方差,就可评估图像是否存在色偏。
import cv2
img = cv2.imread('tooth/10.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
l_channel, a_channel, b_channel = cv2.split(img)
h,w,_ = img.shape
da = a_channel.sum()/(h*w)-128
db = b_channel.sum()/(h*w)-128
histA = [0]*256
histB = [0]*256
for i in range(h):
for j in range(w):
ta = a_channel[i][j]
tb = b_channel[i][j]
histA[ta] += 1
histB[tb] += 1
msqA = 0
msqB = 0
for 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 math
result = math.sqrt(da*da+db*db)/math.sqrt(msqA*msqA+msqB*msqB)
print("d/m = %s"%result)
参考链接:清晰度检测:
https://blog.csdn.net/qq_42238397/article/details/81745600
亮度检测:
https://blog.csdn.net/qq_40790959/article/details/106107574
色偏检测:
https://blog.csdn.net/sparrowwf/article/details/86595162
https://blog.csdn.net/fightingforcv/article/details/52724848
1.清晰度检测:利用拉普拉斯算子计算图片的二阶导数,反映图片的边缘信息,同样事物的图片,清晰度高的,相对应的经过拉普拉斯算子滤波后的图片的方差也就越大。import cv2#利用拉普拉斯def getImageVar(imgPath): image = cv2.imread(imgPath) img2gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) imageVar = cv2.Laplacian(img2gray, cv2.C
from tools import calLaplacianVar,overExposeDetect
def check_image(img_path, fixedSize, stdTimes = 1):
#正常值区间
# distArea
本文主要介绍基于
OpenCV
contrib中的quality模块实现图像
质量
评价。图像
质量
评估Image Quality Analysis简称IQA,主要通过数学度量方法来评价图像
质量
的好坏。
本文需要
OpenCV
contrib库,
OpenCV
contrib库的编译安装见:
OpenCV
_contrib库在windows下编译使用指南
本文所有代码见:
OpenCV
-Practical-Exercise
文章目录1
OpenCV
中图像
质量
评价算法介绍1.1 相关背景1.2
OpenCV
中图像质
def getImageVar(imgPath):
image = cv2.imread(imgPath)
img2gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
im...
好的,针对你的问题,我可以提供一些思路和方向,希望能对你有所帮助。
1. 图像预处理:对于车牌识别来说,图像预处理是非常重要的一步。可以采用灰度化、二值化、图像增强等方法,使得图像更加清晰、易于分析。
2. 车牌定位:车牌定位是指在整张图像中找到车牌的位置并进行定位。可以采用基于颜
色
空间的方法、基于边缘
检测
的方法等。
3. 字符分割:车牌中的字符需要进行分割,以便后续进行识别。可以采用基于垂直投影的方法、基于连通域的方法等。
4. 字符识别:字符识别是整个车牌识别系统的核心部分。可以采用基于模板匹配的方法、基于特征提取的方法、基于深度学习的方法等。
5. 车牌信息整合:最后,将所有识别出的字符信息进行整合,得到最终的车牌信息。可以采用字符串拼接的方法、字典匹配的方法等。
以上是基于
python
+
Opencv
的车牌识别的一些思路和方向,希望能对你有所帮助。如果有需要,我可以提供更加详细的说明和代码实现。