基于OpenCV的图像强度操作

重磅干货,第一时间送达

01. 什么是图像强度操作
  • 更改任何通道中的像素值

  • 对图像的数学运算

  • 亮度变化

  • 对比度变化

  • 伽玛操纵

  • 直方图均衡

  • 图像预处理中的滤波等增强

使用OpenCV加载图像

import numpy as npimport cv2from matplotlib import pyplot as pltimg = cv2.imread(folder_path + "imgs/chapter3/man.jpg", 0);plt.imshow(img, cmap = "gray");plt.show()

使用Opencv向输入图像添加常数

img = cv2.imread(folder_path + "imgs/chapter3/man.jpg", 0);##########################FOCUS############################img = cv2.add(img, 120);###########################################################plt.imshow(img, cmap = "gray");plt.show()

使用Opencv减去常数以输入图像

img = cv2.imread(folder_path + "imgs/chapter3/man.jpg", 0);##########################FOCUS############################img = cv2.subtract(img, 120);####################################################################plt.imshow(img, cmap = "gray");plt.show()
02. 图像去均值化

方法1

  • 将图像拆分为其通道。

  • 对于每个通道,计算其平均值。

  • 从该通道中的每个像素中减去均值

方法2(用于深度学习)

将所有图像分割成各自的通道,对于所有图像的每个通道:

  • 为每个图像找到该通道的均值。

  • 查找所有计算出的均值的均值。

应用领域1:批标准化的一部分

# Grayscale imageimport numpy as npimport cv2from matplotlib import pyplot as pltimg = cv2.imread(folder_path + "imgs/chapter3/man.jpg", 0); # read the image as grayscale
# cv2.subtractmean = np.mean(img);img_out = cv2.subtract(img, mean);
f = plt.figure(figsize=(15,15))f.add_subplot(1, 2, 1).set_title('Original Image');plt.imshow(img, cmap = "gray");f.add_subplot(1, 2, 2).set_title('Mean subtracted image');plt.imshow(img_out, cmap = "gray");plt.show()

应用领域1:负片

灰度负片

# negative of grayscaleimport numpy as npimport cv2from matplotlib import pyplot as pltimg = cv2.imread(folder_path + "imgs/chapter3/man.jpg", 0); # read the image as grayscale
#cv2.subtractimg_out = cv2.subtract(255, img);
f = plt.figure(figsize=(15,15))f.add_subplot(1, 2, 1).set_title('Original Image');plt.imshow(img, cmap = "gray");f.add_subplot(1, 2, 2).set_title('Negative image');plt.imshow(img_out, cmap = "gray");plt.show()

RGB图像负片

# negative of rgb imagesimport numpy as npimport cv2from matplotlib import pyplot as pltimg = cv2.imread(folder_path + "imgs/chapter3/castle.png", -1); img_out = 255 - img;
f = plt.figure(figsize=(15,15))f.add_subplot(1, 2, 1).set_title('Original Image');plt.imshow(img[:,:,::-1]);f.add_subplot(1, 2, 2).set_title('Negative image');plt.imshow(img_out[:,:,::-1]);plt.show()
03. 两幅图像的融合

直接融合

# Direct addingimport numpy as npimport cv2from matplotlib import pyplot as plt
img1 = cv2.imread(folder_path + "imgs/chapter3/castle.png", -1); img1 = cv2.resize(img1, (256, 256));img2 = cv2.imread(folder_path + "imgs/chapter3/tessellate.jpg", -1);img2 = cv2.resize(img2, (256, 256));
img_out = cv2.add(img1, img2);
f = plt.figure(figsize=(8,8))plt.imshow(img_out[:,:,::-1]);plt.show()

加权融合

# cv2.addWeighted
import numpy as npimport cv2from matplotlib import pyplot as pltimg1 = cv2.imread(folder_path + "imgs/chapter3/castle.png", -1); img1 = cv2.resize(img1, (256, 256));img2 = cv2.imread(folder_path + "imgs/chapter3/tessellate.jpg", -1);img2 = cv2.resize(img2, (256, 256));
# Like a faint watermarkimg_out = cv2.addWeighted(img1,0.7,img2,0.3,0);
f = plt.figure(figsize=(8,8))plt.imshow(img_out[:,:,::-1]);plt.show()
04. 图像求差
import numpy as npimport cv2from matplotlib import pyplot as pltimg1 = cv2.imread(folder_path + "imgs/chapter3/background.png", -1); img2 = cv2.imread(folder_path + "imgs/chapter3/foreground.png", -1);
img_out = cv2.subtract(img2, img1);
f = plt.figure(figsize=(15,10))f.add_subplot(2, 2, 1).set_title('Background Image');plt.imshow(img1[:, :, ::-1])f.add_subplot(2, 2, 2).set_title('Background image with some object');plt.imshow(img2[:, :, ::-1])f.add_subplot(2, 2, 3).set_title('Subtracted image');plt.imshow(img_out[:, :, ::-1])plt.show()
05. 亮度变化
  • 发光或反射光的质量或状态

  • 亮度是一个相对术语。这取决于您的视觉感知。

  • 亮度可以定义为光源相对于我们所比较的光源输出的能量。

import numpy as npimport cv2from matplotlib import pyplot as pltimg = cv2.imread(folder_path + 'imgs/chapter3/outdoor.jpg')
value = 100 #Increase or decrease brightness by this value
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)hsv[:,:,2] = cv2.add(hsv[:,:,2], value)
img_out = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
f = plt.figure(figsize=(15,15))f.add_subplot(1, 2, 1).set_title('Original Image');plt.imshow(img[:, :, ::-1])f.add_subplot(1, 2, 2).set_title('Brightness manipulated image');plt.imshow(img_out[:, :, ::-1])plt.show()
06. 对比度
  • 对比度是使对象(或其在图像或显示器中的表示形式)与众不同的亮度或颜色差异。

  • 可视化为图像中最大和最小像素强度之间的差异。

  • 对比度由同一视野内物体的颜色和亮度差异决定。

from PIL import Image, ImageEnhancefrom matplotlib import pyplot as plt
img = Image.open(folder_path + "imgs/chapter3/outdoor.jpg");enhancer = ImageEnhance.Contrast(img)out = enhancer.enhance(factor=1.25)
f = plt.figure(figsize=(15,15))f.add_subplot(2, 1, 1).set_title('Original Image');plt.imshow(img)f.add_subplot(2, 1, 2).set_title('Contrast manipulated image');plt.imshow(out)plt.show()
07. 伽玛矫正
  • 伽玛校正是一种用于对亮度进行编码和解码的非线性操作。

  • 所有彩色和灰度数字图像文件都包含伽玛数据。

  • Gamma涉及在数字灵敏度和人眼灵敏度之间进行转换,一方面提供了许多优势,另一方面却增加了复杂性。

  • 伽玛可优化中间调的对比度和亮度。

import numpy as npimport cv2from matplotlib import pyplot as pltimg = cv2.imread(folder_path + 'imgs/chapter3/indoor.jpg')
# Apply Gamma=2.2 on the normalised image and then multiply by scaling constant (For 8 bit, c=255)
# Normalize image, pixels to 0-1# Multiple by gamma# Re-factor the image pixels to have value from 0-255
img_out = np.array(255*(img/255)**2.2,dtype='uint8')
f = plt.figure(figsize=(15,15))f.add_subplot(2, 1, 1).set_title('Original Image');plt.imshow(img[:, :, ::-1])f.add_subplot(2, 1, 2).set_title('Gamma manipulated image');plt.imshow(img_out[:, :, ::-1])plt.show()
08. 直方图均衡

直方图

  • 直方图显示事物发生频率的图表。

  • 图像像素直方图表示具有特定强度值的像素的频率。

直方图均衡

  • 直方图均衡用于增强对比度。

  • 此方法增加了图像的整体对比度。

import numpy as npimport cv2from matplotlib import pyplot as pltimg = cv2.imread(folder_path + "imgs/chapter3/outdoor.jpg", 0)
# Ravel falttens the 2d array to 1d array# 256 - total number of binsplt.hist(img.ravel(),256,[0,256])
plt.title("Histogram for original image")plt.show()
import numpy as npimport cv2from matplotlib import pyplot as pltimg = cv2.imread(folder_path + "imgs/chapter3/outdoor.jpg", 0)
# cv2.equalizeHistimg_out = cv2.equalizeHist(img)
f = plt.figure(figsize=(15,15))f.add_subplot(2, 1, 1).set_title('Original Image');plt.imshow(img, cmap="gray")f.add_subplot(2, 1, 2).set_title('Histogram equalized image');plt.imshow(img_out, cmap="gray")plt.show()

代码链接:https://github.com/Tessellate-Imaging/monk_v1/blob/master/study_roadmaps/3_image_processing_deep_learning_roadmap/1_image_processing_basics/3) Image Intensity manipulation.ipynb

下载1:OpenCV-Contrib扩展模块中文版教程
(0)

相关推荐

  • CV:基于人工智能算法实现人脸口罩的实时检测(结合无人机可,实现实时警告提醒)

    CV:基于人工智能算法实现人脸口罩的实时检测(结合无人机可,实现实时警告提醒) 输出结果 实现代码 参考文章:CV:基于人工智能算法实现人脸口罩的实时检测(结合无人机可,实现实时警告提醒)--代码 更 ...

  • python+opencv图像处理(十五)

    直方图均衡 直方图均衡化是通过对图像的直方图进行修正来获得图像增强效果的方法,主要是进行对比度增强,就是让亮的更亮,暗的更亮. 1.灰度图像的直方图均衡 先上图看效果. 如图上标题所示,第一张是原图, ...

  • python+opencv图像处理(八)

    无所谓,谁会爱上谁... 无所谓,不能天天更... 只要是,不要一直断... -----------------------------------我是可爱的分割线 图像平移的意思就是将图像沿着x轴. ...

  • python+opencv图像处理(六)

    图像相加 两幅图像是可以加在一起的. 图像相加是通过对两幅大小相同的图像对应位置像素的相加运算,以产生一幅新的含有两幅图像信息的图像的方法.有时也称为图像合成. 1.(+)法 数学运算中的+可以用于图 ...

  • 好玩的OpenCV:图像操作的基本知识(2)

    1.1随机生成像素 生成与test.jpg相同大小图片,但是像素是随机生成的. import numpy as np import cv2raw_image = cv2.imread('test图片路 ...

  • python+opencv图像处理(十二)

    图像仿射变换和透视变换 天晴了...... 1.仿射变换 图像的仿射变换就是图像的旋转加上拉升,说直白点,就是把矩形变成平行四边形. 要把矩形变成平行四边行,只需要拉伸其四个角点就行了,事实上,只需要 ...

  • python进阶—OpenCV之图像处理(一)

    文章目录 颜色空间转换 RGB色彩空间 HSV色彩空间 YUV色彩空间 简单的物体跟踪示例 HSV空间目标阈值选取 图像几何变换 图像的缩放 图像的位移 图像的旋转 图像的仿射 图像的投射 图像阈值( ...

  • Python进阶——OpenCV之Core Operations

    文章目录 图像基本操作 访问并修改像素值 访问图像的属性 设置图像区域 图像分割与合并 画图像边框 图像的数学操作 图像叠加 图像融合 图像位操作 Python OpenCV代码检测与速度优化 时隔一 ...

  • python+opencv图像处理(十四)

    图像直方图 1.灰度图像的直方图 灰度图像的直方图是灰度级和这种灰度级的概率之间关系的图形. 直接看图,下图中左侧是原图,右图为其直方图. 完整代码如下: import cv2 as cv impor ...

  • 使用 OpenCV 将卷积实现为图像过滤器

    卷积简介 卷积是计算机视觉 (CV) 中的一个流行术语.在讨论如何实现 CV 任务时,经常会提到卷积神经网络.因此,任何 CV 追求者都必须完全理解"卷积"一词. 卷积是几个图像处 ...

  • Python+opencv 图像处理(五)

        灰度反转 "你说的黑是什么黑......"有一首歌的歌词是这样的. 在图像中,黑是什么? 很简单,就是0嘛. 因为在数字图像里,用0表示黑. 那么,"你说的白是什 ...

  • python+opencv图像处理(七)

    图像相减 图像可以做加法,当然也可以做减法,还可以做乘除法呢,这叫图像的四则运算. 本篇介绍两幅图像相减,以及使用加减法进行图像亮度增强. 图像相减的用处也比较多,比如视频中,要知道上一时刻和下一时刻 ...