OpenCV:图像锐化处理、提高图像对比度
获取图像像素指针
CV_Assert(myImage.depth() == CV_8U);
Mat.ptr(int i=0)获取像素矩阵指针,索引i表示第i行,从0开始计数;
获得当前指针const uchar* current = myImage.ptr(row);
获取当前像素点P(row, col)的像素值p(row, col) = current[col];
像素范围处理saturate_cast
saturate_cast(小于0的数), 返回0;
saturate_cast(大于255的数), 返回255;
saturate_cast(0-255之间的数), 返回输入的值本身;
这个函数的功能是,确保RGB值的范围处于0-255之间;’
提高图像对比度原理
通过计算,使得当前像素=5*当前像素-(左侧像素+右侧像素+上方像素+下方像素);
这样计算的目的是,使得图像中亮的部分更亮,暗的部分更暗,从而增加图像的对比度;
程序实现
#include <iostream>
#include <opencv2/opencv.hpp>
#include <math.h>using namespace std;
using namespace cv;int main() {// 加载一张普通图片Mat src, dst;src = imread("C:\\Users\\Administrator\\Desktop\\background.png");if (!src.data) { // 判断是否获取到了图片printf("Could not load image!\n");return -1;}// 将这张普通图片显示出来namedWindow("input image", WINDOW_AUTOSIZE);imshow("input image", src);// 这里要用图片和掩膜做卷积操作,所以要把最外面的那一圈像素去掉// 图像宽度 = 每一行像素点个数 X 每个像素点的通道数(如:RGB)// 序号是从0开始的,所以-1后,相当于把第一个和最后一个像素点去掉int cols = (src.cols-1) * src.channels();int offsetx = src.channels();// 获取图像高度int rows = src.rows;// 创建一个和载入图片相同大小的空的矩阵dst = Mat::zeros(src.size(), src.type());// 序号是从第0行开始的,这样把第0行略过for (int row = 1; row < (rows - 1); row++) {const uchar* previous = src.ptr<uchar>(row - 1); // 获取上一行指针const uchar* current = src.ptr<uchar>(row); // 获取当前行指针const uchar * next = src.ptr<uchar>(row + 1); // 获取下一行指针// 创建一个行指针指向创建的空矩阵的对应行uchar* output = dst.ptr<uchar>(row);for (int col = offsetx; col < cols; col++) {// 把每个像素的值限定在0-255之间output[col] = saturate_cast<uchar>(5 * current[col] - (current[col - offsetx] + current[col + offsetx] + previous[col] + next[col]));}}// 显示提高对比度之后的图像namedWindow("contrast image demo", WINDOW_AUTOSIZE);imshow("contrast image demo", dst);waitKey(0); // 让程序在这里卡住,不然会一下子退出return 0;
}
运行效果
左侧为原图,右侧为处理后的图像:
函数调用filter2D功能
1、定义掩膜:Mat kernel = (Mat_(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
2、filter2D(src, dst, src.depth(), kernel); 其中src与dst是Mat类型变量、src.depth表示位图深度,有32、24/8等;
程序实现
#include <iostream>
#include <opencv2/opencv.hpp>
#include <math.h>using namespace std;
using namespace cv;int main() {// 加载一张普通图片Mat src, dst;src = imread("C:\\Users\\Administrator\\Desktop\\background.png");if (!src.data) { // 判断是否获取到了图片printf("Could not load image!\n");return -1;}// 将这张普通图片显示出来namedWindow("input image", WINDOW_AUTOSIZE);imshow("input image", src);// 使用内置的APIMat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);filter2D(src, dst, src.depth(), kernel);// 显示提高对比度之后的图像namedWindow("contrast image demo", WINDOW_AUTOSIZE);imshow("contrast image demo", dst);waitKey(0); // 让程序在这里卡住,不然会一下子退出return 0;
}
通过调用API我们一样达到了同样的图片处理效果。
OpenCV:图像锐化处理、提高图像对比度相关推荐
- Python,OpenCV直方图均衡化以提高图像对比度
Python,OpenCV直方图均衡化以提高图像对比度 1. 效果图 2. 原理 2.1 直方图均衡化应用 2.2 直方图均衡化分类 3. 源代码 参考 这篇博客将介绍直方图均衡化(全局 & ...
- 独家|OpenCV 1.6 改变图像的对比度和亮度!
翻译:陈之炎 校对:吴金迪本文约2500字,建议阅读5分钟本文为大家介绍了OpenCV改变图像的对比度和亮度. 目标 在本教程中, 你将学习到以下内容: 访问像素值; 用零初始化矩阵; 学习CV :: ...
- 使用Python,OpenCV和Scikit-Image检测低对比度图像
使用Python,OpenCV和Scikit-Image检测低对比度图像 1. 效果图 2. 原理 3. 源码 参考 这篇博客将介绍如何使用Python,OpenCV和Scikit-Image检测低对 ...
- Opencv图像的亮度和对比度调整
文章目录 前言 一.图像亮度和对比度的基本概念: 1.图像亮度: 2.图像对比度: 二.RGB三通道色彩空间的图像变换: 1.线性变换公式如下: 2.操作简介: 3.图像亮度调整: 4.图像对比度调整 ...
- Android OpenCV之算数操作与调整图像的亮度和对比度
Android OpenCV之算数操作与调整图像的亮度和对比度 OpenCV算数API介绍 Mat 对象之间的加.减.乘.除最常用的方法如下: add(Mat src1, Mat src2, Mat ...
- 【OpenCV学习】【7】图像的亮度和对比度操作
如果我们需要增加图像的亮度或者减少图像的亮度,可以首先先创建一个和原图像一样大小的空白图像,然后进行加减操作即可增加或减小亮度! import cv2 import numpy as npimage ...
- 在OpenCV环境下对图像做Gamma校正
什么是Gamma校正? Gamma校正是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系. 上面中的指数γ即为Gamma. 经过Gamma校正后的输入和输出图像灰度值关系如 ...
- 【opencv学习】【图像直方图和均衡化】
今天学习图像直方图和图像均衡化 一:图像直方图 import cv2 import numpy as np import matplotlib.pyplot as plt# 图像的直方图,就是统计哪些 ...
- python计算机视觉-- 基于OpenCV的图像分割和图像融合系统
目录 前言 一.需求分析 二.概要设计 2.1 基本原理 2.2 界面设计 三.详细设计 3.1 系统流程图 3.2 数据集 3.3 代码实现 3.3.1 利用deeplabV3模型分割 3.3.2 ...
最新文章
- MySQL Cluster安装
- Matlab学习笔记——二进制文件的读写
- lvs在linux系统下安装,Linux下安装lvs
- 在Linux中创建静态库和动态库 (转)
- 新疆尉犁县境内塔克拉玛干沙漠雪景美如画
- 一步步创建第一个Docker App —— 4. 部署应用
- 详解忘记linux root用户密码的措施
- 核心交换机的TRUNK配置详细讲解
- Kubernetes部署项目报错ImagePullBackOff日志提示rpc error: code..http: server gave HTTP response to HTTPS client
- Cannot forward ... response ... committed
- LintCode—删除排序链表中的重复元素(112)
- UVA12235 - Help Bubu
- 十三、商城 - 商城架构-分布式Dubbo(1)
- linux安装xbox无线手柄,想不到xbox手柄配对方法居然还有3个【详解】
- win8dns服务器没响应,win8笔记本dns服务器未响应怎么办
- 「星火计划沙龙视频」腾讯自研Kona JDK技术分享
- 计算机专业,真的这么赚钱吗?
- Elasticsearch - 压测方案之 esrally 简介
- Pyhon 使用simpleCV包
- 两个脚本解决打开安卓模拟器时会显示黑框cmd的问题