千家信息网

如何使用OpenCV实现图像增强

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容介绍了"如何使用OpenCV实现图像增强"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!本期将
千家信息网最后更新 2026年11月01日如何使用OpenCV实现图像增强

本篇内容介绍了"如何使用OpenCV实现图像增强"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!


本期将介绍如何通过图像处理从低分辨率/模糊/低对比度的图像中提取有用信息。

下面让我们一起来探究这个过程:

首先我们获取了一个LPG气瓶图像,该图像取自在传送带上运行的仓库。我们的目标是找出LPG气瓶的批号,以便更新已检测的LPG气瓶数量。

步骤1:导入必要的库

import cv2import numpy as npimport matplotlib.pyplot as plt

步骤2:加载图像并显示示例图像。

img= cv2.imread('cylinder1.png')img1=cv2.imread('cylinder.png')images=np.concatenate(img(img,img1),axis=1)cv2.imshow("Images",images)cv2.waitKey(0)cv2.destroyAllWindows()

LPG气瓶图片(a)批次-D26(b)批次C27

该图像的对比度非常差。我们几乎看不到批号。这是在灯光条件不足的仓库中的常见问题。接下来我们将讨论对比度受限的自适应直方图均衡化,并尝试对数据集使用不同的算法进行实验。

步骤3:将图像转换为灰度图像

gray_img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)gray_img1=cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)

步骤4:找到灰度图像的直方图后,寻找强度的分布。

hist=cv2.calcHist(gray_img,[0],None,[256],[0,256])hist1=cv2.calcHist(gray_img1,[0],None,[256],[0,256])plt.subplot(121)plt.title("Image1")plt.xlabel('bins')plt.ylabel("No of pixels")plt.plot(hist)plt.subplot(122)plt.title("Image2")plt.xlabel('bins')plt.ylabel("No of pixels")plt.plot(hist1)plt.show()

步骤5:现在,使用cv2.equalizeHist()函数来均衡给定灰度图像的对比度。cv2.equalizeHist()函数可标准化亮度并增加对比度。

gray_img_eqhist=cv2.equalizeHist(gray_img)gray_img1_eqhist=cv2.equalizeHist(gray_img1)hist=cv2.calcHist(gray_img_eqhist,[0],None,[256],[0,256])hist1=cv2.calcHist(gray_img1_eqhist,[0],None,[256],[0,256])plt.subplot(121)plt.plot(hist)plt.subplot(122)plt.plot(hist1)plt.show()

步骤6:显示灰度直方图均衡图像

eqhist_images=np.concatenate((gray_img_eqhist,gray_img1_eqhist),axis=1)cv2.imshow("Images",eqhist_images)cv2.waitKey(0)cv2.destroyAllWindows()

灰度直方图均衡

让我们进一步深入了解CLAHE

步骤7:

对比度有限的自适应直方图均衡

该算法可以用于改善图像的对比度。该算法通过创建图像的多个直方图来工作,并使用所有这些直方图重新分配图像的亮度。CLAHE可以应用于灰度图像和彩色图像。有2个参数需要调整。

1. 限幅设置了对比度限制的阈值。默认值为40

2. tileGridsize设置行和列中标题的数量。在应用CLAHE时,为了执行计算,图像被分为称为图块(8 * 8)的小块。

clahe=cv2.createCLAHE(clipLimit=40)gray_img_clahe=clahe.apply(gray_img_eqhist)gray_img1_clahe=clahe.apply(gray_img1_eqhist)images=np.concatenate((gray_img_clahe,gray_img1_clahe),axis=1)cv2.imshow("Images",images)cv2.waitKey(0)cv2.destroyAllWindows()

步骤8:

门槛技术

阈值处理是一种将图像划分为前景和背景的简单但有效的方法。如果像素强度小于某个预定义常数(阈值),则最简单的阈值化方法将源图像中的每个像素替换为黑色像素;如果像素强度大于阈值,则使用白色像素替换源像素。阈值的不同类型是:

cv2.THRESH_BINARY

cv2.THRESH_BINARY_INV

cv2.THRESH_TRUNC

cv2.THRESH_TOZERO

cv2.THRESH_TOZERO_INV

cv2.THRESH_OTSU

cv2.THRESH_TRIANGLE

尝试更改阈值和max_val以获得不同的结果。

th=80max_val=255ret, o1 = cv2.threshold(gray_img_clahe, th, max_val, cv2.THRESH_BINARY)cv2.putText(o1,"Thresh_Binary",(40,100),cv2.FONT_HERSHEY_SIMPLEX,2,(255,255,255),3,cv2.LINE_AA)ret, o2 = cv2.threshold(gray_img_clahe, th, max_val, cv2.THRESH_BINARY_INV)cv2.putText(o2,"Thresh_Binary_inv",(40,100),cv2.FONT_HERSHEY_SIMPLEX,2,(255,255,255),3,cv2.LINE_AA)ret, o3 = cv2.threshold(gray_img_clahe, th, max_val, cv2.THRESH_TOZERO)cv2.putText(o3,"Thresh_Tozero",(40,100),cv2.FONT_HERSHEY_SIMPLEX,2,(255,255,255),3,cv2.LINE_AA)ret, o4 = cv2.threshold(gray_img_clahe, th, max_val, cv2.THRESH_TOZERO_INV)cv2.putText(o4,"Thresh_Tozero_inv",(40,100),cv2.FONT_HERSHEY_SIMPLEX,2,(255,255,255),3,cv2.LINE_AA)ret, o5 = cv2.threshold(gray_img_clahe, th, max_val, cv2.THRESH_TRUNC)cv2.putText(o5,"Thresh_trunc",(40,100),cv2.FONT_HERSHEY_SIMPLEX,2,(255,255,255),3,cv2.LINE_AA)ret ,o6=  cv2.threshold(gray_img_clahe, th, max_val,  cv2.THRESH_OTSU)cv2.putText(o6,"Thresh_OSTU",(40,100),cv2.FONT_HERSHEY_SIMPLEX,2,(255,255,255),3,cv2.LINE_AA)
final=np.concatenate((o1,o2,o3),axis=1)final1=np.concatenate((o4,o5,o6),axis=1)
cv2.imwrite("Image1.jpg",final)cv2.imwrite("Image2.jpg",final1)

Thresh_Binary_inv,Thresh_Binary_inv,Thresh_Tozero

Thresh_Tozero_inv,Thresh_trunc,Thresh_OSTU

步骤9:自适应阈值

在上一节中,我们使用了全局阈值来应用cv2.threshold()。如我们所见,由于图像不同区域的照明条件不同,因此获得的结果不是很好。在这些情况下,您可以尝试自适应阈值化。在OpenCV中,自适应阈值处理由cv2.adapativeThreshold()函数执行

此功能将自适应阈值应用于src阵列(8位单通道图像)。maxValue参数设置dst图像中满足条件的像素的值。adaptiveMethod参数设置要使用的自适应阈值算法。

cv2.ADAPTIVE_THRESH_MEAN_C:将T(x,y)阈值计算为(x,y)的blockSize x blockSize邻域的平均值减去C参数。
cv2.ADAPTIVE_THRESH_GAUSSIAN_C:将T(x,y)阈值计算为(x,y)的blockSize x blockSize邻域的加权总和减去C参数。

blockSize参数设置用于计算像素阈值的邻域的大小,它可以取值3、5、7等。

C参数只是从均值或加权均值中减去的常数(取决于adaptiveMethod参数设置的自适应方法)。通常,此值为正,但可以为零或负。

gray_image = cv2.imread('cylinder1.png',0)gray_image1 = cv2.imread('cylinder.png',0)thresh2 = cv2.adaptiveThreshold(gray_image, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)thresh3 = cv2.adaptiveThreshold(gray_image, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 31, 3)thresh4 = cv2.adaptiveThreshold(gray_image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 13, 5)thresh5 = cv2.adaptiveThreshold(gray_image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 4)thresh21 = cv2.adaptiveThreshold(gray_image1, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)thresh31 = cv2.adaptiveThreshold(gray_image1, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 31, 5)thresh41 = cv2.adaptiveThreshold(gray_image1, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 21,5 )thresh51 = cv2.adaptiveThreshold(gray_image1, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 5)
final=np.concatenate((thresh2,thresh3,thresh4,thresh5),axis=1)final1=np.concatenate((thresh21,thresh31,thresh41,thresh51),axis=1)cv2.imwrite('rect.jpg',final)cv2.imwrite('rect1.jpg',final1)

自适应阈值

自适应阈值

步骤10:OTSU二值化

Otsu的二值化算法,在处理双峰图像时是一种很好的方法。双峰图像可以通过其包含两个峰的直方图来表征。Otsu的算法通过最大化两类像素之间的方差来自动计算将两个峰分开的最佳阈值。等效地,最佳阈值使组内差异最小化。Otsu的二值化算法是一种统计方法,因为它依赖于从直方图得出的统计信息(例如,均值,方差或熵)
gray_image = cv2.imread('cylinder1.png',0)gray_image1 = cv2.imread('cylinder.png',0)ret,thresh2 = cv2.threshold(gray_image,0, 255,  cv2.THRESH_BINARY+cv2.THRESH_OTSU)ret,thresh3 = cv2.threshold(gray_image1,0, 255,  cv2.THRESH_BINARY+cv2.THRESH_OTSU)
cv2.imwrite('rect.jpeg',np.concatenate((thresh2,thresh3),axis=1))

OTSU二值化

现在,我们已经从低对比度的图像中清楚地识别出批号。

"如何使用OpenCV实现图像增强"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

图像 阈值 步骤 像素 对比度 直方图 参数 算法 灰度 不同 均衡 方法 气瓶 处理 应用 函数 均值 强度 批号 条件 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网新科技 互联网最新的科技 互联网扶贫科技 互联网医疗科技 互联网科技金融公司 互联网与新科技 顺网科技2021年互联网排名 济南和联互联网科技有限公司 深圳市运趣互联网科技有限公司 中国的互联网科技企业的崛起 互联网对科技的发展 昊天互联网科技有限公司 苏州铭阳互联网科技有限公司 广州新华互联网科技学校电竞方面 高科技互联网套路 2021互联网科技公司排名 广州梦谷互联网科技有限公司领导 互联网高科技行业有哪些企业 恒生互联网科技趋势 高科技和互联网的现代国家 广州紫鲸互联网科技有限公司 期待互联网科技 壕鑫互联网络科技 人人互联网科技是培训 互联网科技素材视频竖屏 温州喔噻互联网科技有限公司 互联网科技如何创业 从那以后互联网科技有限公司 广州梦谷互联网科技有限公司领导 互联网科技对化妆品行业
0