基于OpenCV的图像强度操作
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
01. 什么是图像强度操作
更改任何通道中的像素值
对图像的数学运算
亮度变化
对比度变化
伽玛操纵
直方图均衡
图像预处理中的滤波等增强
使用OpenCV加载图像
import numpy as np
import cv2
from matplotlib import pyplot as plt
img = 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 image
import numpy as np
import cv2
from matplotlib import pyplot as plt
img = cv2.imread(folder_path + "imgs/chapter3/man.jpg", 0); # read the image as grayscale# cv2.subtract
mean = 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 grayscale
import numpy as np
import cv2
from matplotlib import pyplot as plt
img = cv2.imread(folder_path + "imgs/chapter3/man.jpg", 0); # read the image as grayscale#cv2.subtract
img_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 images
import numpy as np
import cv2
from matplotlib import pyplot as plt
img = 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 adding
import numpy as np
import cv2
from 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));img_out = cv2.add(img1, img2);f = plt.figure(figsize=(8,8))
plt.imshow(img_out[:,:,::-1]);
plt.show()
加权融合
# cv2.addWeightedimport numpy as np
import cv2
from 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));# Like a faint watermark
img_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 np
import cv2
from matplotlib import pyplot as plt
img1 = 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 np
import cv2
from matplotlib import pyplot as plt
img = cv2.imread(folder_path + 'imgs/chapter3/outdoor.jpg')value = 100 #Increase or decrease brightness by this valuehsv = 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, ImageEnhance
from matplotlib import pyplot as pltimg = 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 np
import cv2
from matplotlib import pyplot as plt
img = 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-255img_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 np
import cv2
from matplotlib import pyplot as plt
img = cv2.imread(folder_path + "imgs/chapter3/outdoor.jpg", 0)# Ravel falttens the 2d array to 1d array
# 256 - total number of bins
plt.hist(img.ravel(),256,[0,256])plt.title("Histogram for original image")
plt.show()
import numpy as np
import cv2
from matplotlib import pyplot as plt
img = cv2.imread(folder_path + "imgs/chapter3/outdoor.jpg", 0)# cv2.equalizeHist
img_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扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。
下载2:Python视觉实战项目31讲
在「小白学视觉」公众号后台回复:Python视觉实战项目31讲,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。
下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。
下载4:leetcode算法开源书
在「小白学视觉」公众号后台回复:leetcode,即可下载。每题都 runtime beats 100% 的开源好书,你值得拥有!
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
基于OpenCV的图像强度操作相关推荐
- 基于OpenCV平滑图像
基于OpenCV平滑图像也就是图像模糊,本博文介绍使用OpenCV的不同函数通过线性滤波进行图像平滑. cv::blur cv::GaussianBlur (高斯模糊) cv::medianBlur ...
- 基于OPENCV和图像减法的PCB缺陷检测
基于OPENCV和图像减法的PCB缺陷检测 原文地址:PCB defect detection USING OPENCV with image subtraction method Abstract ...
- 数字识别java开源_Java基于opencv实现图像数字识别(三)—灰度化和二值化
Java基于opencv实现图像数字识别(三)-灰度化和二值化 一.灰度化 灰度化:在RGB模型中,如果R=G=B时,则彩色表示灰度颜色,其中R=G=B的值叫灰度值:因此,灰度图像每个像素点只需一个字 ...
- Java基于opencv实现图像数字识别(一),java开发面试笔试题
我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...
- 基于OpenCV实现图像线性变化
基础知识: 线性灰度变换函数f(x)是一个一维线性函数 y=f(x)=ax+b 式中:a为线性函数的斜率,b为线性函数在y轴的截距,x表示输入图像的灰度值,y表示输出图像的灰度值. (1) 当a> ...
- Java基于opencv实现图像数字识别(一)
Java基于opencv实现图像数字识别(一) 最近分到了一个任务,要做数字识别,我分配到的任务是把数字一个个的分开:当时一脸懵逼,直接百度java如何分割图片中的数字,然后就百度到了用Buffere ...
- 4.3【图像镜像】-------------基于Opencv实现-----图像的镜像变换
[1]理论知识: 镜像变换又分为水平镜像和垂直镜像,水平镜像即将图像左半部分和右半部分以图像竖直中轴线为中心轴进行兑换,而竖直镜像则是将图像上半部分和下半部分以图像水平中轴线为中 ...
- 基于OpenCV实现------图像的转置
[1]理论基础 图像转置是将图像的x坐标和y坐标互换,图像的大小会随之改变----------即高度和宽度将互换. [2]图像转置的变换公式 因为转置矩阵的逆矩阵仍然是其本身,故转置变换的逆变换具有相 ...
- 基于OpenCV实现图像平移
[1]理论知识 图像平移就是将图像中所有的点按照指定的平移量水平或者垂直移动 [2]完整代码 /*--------------------------------------------------- ...
最新文章
- 2021年4月27日 华为Cloud AI 通用软件开发实习面试(一面)
- 泰语7个元音变形_大概是最全的音标总结--元音部分
- rand和srand
- 【数据】深度学习从“数据集”开始
- [转载]我的博后申请经历从陶瓷到Offer过程
- BSTR、char* 和 CString 之间的转换 (转)
- node link 踩坑记录
- 使用EntityFramework连接 Mysql
- MySQL内存----使用说明全局缓存+线程缓存) 转
- 一本快速入门ARM64体系结构的编程书
- 阿里云分布式架构云平台解决方案
- 微信小程序-001-抽签功能
- 01 电阻的简介及常见电路分析
- mysql学习计划_MySQL学习计划
- Bank相关1_数据移行
- C++分数简单的加减法
- 嵌入式开发和c/c++编程经验总结
- 响应式网站设计(2)-关于网站制作你不知道的那些文件儿
- ImageLoader和GridView小总结
- 【FXCG】通胀差异性仍将导致各国货币政策分化
热门文章
- 南大和中大“合体”拯救手残党:基于GAN的PI-REC重构网络,“老婆”画作有救了 | 技术头条...
- 首款AI看球机器人亮相北京,已上线IOS版和安卓版
- 如何在NLP领域干成第一件事
- 重磅 | 2017年深度学习优化算法研究亮点最新综述火热出炉
- JetBrains 宣布:IntelliJ 平台彻底停用 Log4j 组件,建议切换至 java.util.logging
- MySQL 批量插入:如何不插入重复数据?
- 译 | 缓存穿透问题导致Facebook史上最严重事故之一
- 超详细解析 | 一致性协议算法-2PC、3PC、Paxos、Raft、ZAB、NWR
- Spring Boot 最最最常用的注解梳理
- 最新版IDEA常用配置指南,打造你的最酷IDE