如何让图像变亮---OpenCV-Python开发指南(1)

简介: 如何让图像变亮---OpenCV-Python开发指南(1)

图像的基本表示方法


在实现图像如何变亮之前,我们需要认识一下图像的基本表示方法。在电脑中,图像被分为3种:二值图像,灰度图像以及彩色图像。


其中二值图像是指仅仅包含黑色和白色两种颜色的图像,比如在程序中,为了表示数字A,我们可以通过如下栅格状排列的数据集来表示,如下图所示:

其中0代表黑色,1代表白色,这样我们可以确定我们要显示的内容,不过其没有颜色,也没有深浅,只能显示形状。


第2个种图像就是灰度图像,它可以通过深浅绘制出大致的人物形状,内容样式等等,但其没有颜色。效果与上面一样,只是每一个方块的数值不在是0和1,而是[0,255]。


最后一种是彩色图像,它就是在灰度图像上添加了颜色,虽然也可以用上面的二值图像来表示,但其中的一个方块不是0和1,也不是[0,255],而是[[0,255],[0,255],[0,255]]。这样也就是变成了一个三维的矩阵。


对于图像的基础知识,我们就介绍到这里。下面,我们每篇博文都将是一篇实战与理论的结合,本篇主要讲解图像的加法运算,并实现图像的亮度调节。


图像的两种加法运算


对于图像的处理来说,加法运算都是比较基础的运算。而复杂的图像处理,都是通过这些基础的知识来完成的。所以,对于OpenCV的开篇,我们要详细介绍它的加法运算。


在图像的处理过程中,OpenCV给我们提供了两种对图像的加法运算。一种是通过“+”号直接处理,一种是通过add函数进行处理。


“+”与add函数


在认识“+”运算符之前,我们需要了解一下RGB图像颜色的组成。众所周知,不管是红色,蓝色还是绿色,通过程序设置的最大值就是255。那么现在就有一个棘手的问题,假如加法运算之后,大于255怎么办?


对于“+”运算符来说,如果大于了255,就需要取余数。比如绿色值为222,现在要加55,那么最后值不是277,而是21。


而add函数并不是这样,通过add实现图像的加法运算,没有取余数的说法,凡是加法之后大于255的,统一都设置为255。了解了这些,我们就可以非常灵活的使用加法运算。


获取一个图像


既然了解了图像的加法运算,下面我们就来获取一个图像进行操作,代码如下所示:

import cv2
img = cv2.imread("1.jpg", 1)


这里,我们通过import cv2导入OpenCV库,然后获取图像,这里需要注意第2个参数。博主这里专门列出一个表格方便大家认识第2个参数意义。

数值 含义
-1 保持原格式不变 (也就是如果是灰度图像那么就是灰度图像,如果是彩色图像,那么就是彩色)
0 将图像调整为单通道灰度图像
1 将图像调整为3通道BGR图像,这个是more五年值
2 当载入图像深度为16位或者32位时,就返回其对应的深度图像;否则,将其转换为8位图像
4 以任何可能的颜色格式读取图像
8 使用gdal驱动程序加载图像

以上是我们常用到的参数值,当然不仅仅只有这些参数,还有一大堆获取图像后缩小图像大小的参数,感兴趣的可以查询开发文档。


接着,我们将获取的图像显示出来,具体代码如下所示:

import cv2
img = cv2.imread("1.jpg", -1)
cv2.imshow("图片", img)#显示图像,参数1为窗口标题,2为获取的图像,中文乱码后续讲解
cv2.waitKey()#等待用户按下
cv2.destroyAllWindows()#释放所有窗口


上面的注释够详细,这里就不在赘述。运行之后,显示的效果如下所示:


调整图像亮度


调整图像亮度我们一般使用add函数,但是为了区分两种加法的区别,我们同时计算并同时显示其图像,具体代码如下所示:

import cv2
img = cv2.imread("1.jpg", -1)
symbol_img=img+img
add_img=cv2.add(img,img)
cv2.imshow("图片1", symbol_img)
cv2.imshow("图片2", add_img)
cv2.waitKey()
cv2.destroyAllWindows()


运行之后,显示的效果如下图所示(左“+”,右add):


其中左边图像大于255的全部取余数,导致本来亮的像素变得更暗了。而右边图像因为使用add函数不用取模,大于255统一赋值为255,所以每个细节都只会比原图更亮。

相关文章
|
12天前
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
29 4
|
21天前
|
机器学习/深度学习 人工智能 TensorFlow
使用Python和TensorFlow实现图像识别
【8月更文挑战第31天】本文将引导你了解如何使用Python和TensorFlow库来实现图像识别。我们将从基本的Python编程开始,逐步深入到TensorFlow的高级功能,最后通过一个简单的代码示例来展示如何训练一个模型来识别图像。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息。
127 53
|
1天前
|
机器学习/深度学习 算法 TensorFlow
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
15 1
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
|
23天前
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
|
20天前
|
机器学习/深度学习 人工智能 TensorFlow
利用Python和TensorFlow实现简单图像识别
【8月更文挑战第31天】在这篇文章中,我们将一起踏上一段探索人工智能世界的奇妙之旅。正如甘地所言:“你必须成为你希望在世界上看到的改变。” 通过实践,我们不仅将学习如何使用Python和TensorFlow构建一个简单的图像识别模型,而且还将探索如何通过这个模型理解世界。文章以通俗易懂的方式,逐步引导读者从基础到高级,体验从编码到识别的整个过程,让每个人都能在AI的世界中看到自己的倒影。
WK
|
20天前
|
编解码 计算机视觉 Python
如何在OpenCV中进行图像转换
在OpenCV中,图像转换涉及颜色空间变换、大小调整及类型转换等操作。常用函数如`cvtColor`可实现BGR到RGB、灰度图或HSV的转换;`resize`则用于调整图像分辨率。此外,通过`astype`或`convertScaleAbs`可改变图像数据类型。对于复杂的几何变换,如仿射或透视变换,则可利用`warpAffine`和`warpPerspective`函数实现。这些技术为图像处理提供了强大的工具。
WK
50 1
|
1月前
|
机器学习/深度学习 人工智能 算法
【深度学习】python之人工智能应用篇——图像生成技术(二)
图像生成是计算机视觉和计算机图形学领域的一个重要研究方向,它指的是通过计算机算法和技术生成或合成图像的过程。随着深度学习、生成模型等技术的发展,图像生成领域取得了显著的进步,并在多个应用场景中发挥着重要作用。
37 9
|
1月前
|
机器人 计算机视觉
巧用 OpenCV solvePnP() 函数完成由图像坐标系到机器人坐标系的转换(二维坐标系之间的转换)
巧用 OpenCV solvePnP() 函数完成由图像坐标系到机器人坐标系的转换(二维坐标系之间的转换)
37 2
|
20天前
|
机器学习/深度学习 自动驾驶 计算机视觉
使用Python实现简单的图像识别
【8月更文挑战第31天】在本文中,我们将探索如何使用Python语言和其强大的库来创建一个简单的图像识别系统。通过逐步指导,我们将了解如何准备图像数据,选择和训练模型,以及评估我们的成果。无论你是机器学习的初学者还是希望扩展你的技能集,这篇文章都将为你提供实用的知识和代码示例。
|
20天前
|
机器学习/深度学习 人工智能 算法框架/工具
使用Python构建简单神经网络进行图像识别
【8月更文挑战第31天】在本文中,我们将探索如何利用Python编程语言和深度学习框架Keras来搭建一个简单的神经网络模型。通过这个模型,我们能够实现基础的图像识别功能。文章将引导读者了解神经网络的基本概念,手把手教学如何准备数据集、构建网络结构、训练模型以及评估结果。最终,我们将看到即使是简单的神经网络也能在处理图像识别任务时展现出惊人的能力。