获取图像像素指针

  • 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:图像锐化处理、提高图像对比度相关推荐

  1. Python,OpenCV直方图均衡化以提高图像对比度

    Python,OpenCV直方图均衡化以提高图像对比度 1. 效果图 2. 原理 2.1 直方图均衡化应用 2.2 直方图均衡化分类 3. 源代码 参考 这篇博客将介绍直方图均衡化(全局 & ...

  2. 独家|OpenCV 1.6 改变图像的对比度和亮度!

    翻译:陈之炎 校对:吴金迪本文约2500字,建议阅读5分钟本文为大家介绍了OpenCV改变图像的对比度和亮度. 目标 在本教程中, 你将学习到以下内容: 访问像素值; 用零初始化矩阵; 学习CV :: ...

  3. 使用Python,OpenCV和Scikit-Image检测低对比度图像

    使用Python,OpenCV和Scikit-Image检测低对比度图像 1. 效果图 2. 原理 3. 源码 参考 这篇博客将介绍如何使用Python,OpenCV和Scikit-Image检测低对 ...

  4. Opencv图像的亮度和对比度调整

    文章目录 前言 一.图像亮度和对比度的基本概念: 1.图像亮度: 2.图像对比度: 二.RGB三通道色彩空间的图像变换: 1.线性变换公式如下: 2.操作简介: 3.图像亮度调整: 4.图像对比度调整 ...

  5. Android OpenCV之算数操作与调整图像的亮度和对比度

    Android OpenCV之算数操作与调整图像的亮度和对比度 OpenCV算数API介绍 Mat 对象之间的加.减.乘.除最常用的方法如下: add(Mat src1, Mat src2, Mat ...

  6. 【OpenCV学习】【7】图像的亮度和对比度操作

    如果我们需要增加图像的亮度或者减少图像的亮度,可以首先先创建一个和原图像一样大小的空白图像,然后进行加减操作即可增加或减小亮度! import cv2 import numpy as npimage ...

  7. 在OpenCV环境下对图像做Gamma校正

    什么是Gamma校正? Gamma校正是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系. 上面中的指数γ即为Gamma. 经过Gamma校正后的输入和输出图像灰度值关系如 ...

  8. 【opencv学习】【图像直方图和均衡化】

    今天学习图像直方图和图像均衡化 一:图像直方图 import cv2 import numpy as np import matplotlib.pyplot as plt# 图像的直方图,就是统计哪些 ...

  9. python计算机视觉-- 基于OpenCV的图像分割和图像融合系统

    目录 前言 一.需求分析 二.概要设计 2.1 基本原理 2.2 界面设计 三.详细设计 3.1 系统流程图 3.2 数据集 3.3 代码实现 3.3.1 利用deeplabV3模型分割 3.3.2  ...

最新文章

  1. MySQL Cluster安装
  2. Matlab学习笔记——二进制文件的读写
  3. lvs在linux系统下安装,Linux下安装lvs
  4. 在Linux中创建静态库和动态库 (转)
  5. 新疆尉犁县境内塔克拉玛干沙漠雪景美如画
  6. 一步步创建第一个Docker App —— 4. 部署应用
  7. 详解忘记linux root用户密码的措施
  8. 核心交换机的TRUNK配置详细讲解
  9. Kubernetes部署项目报错ImagePullBackOff日志提示rpc error: code..http: server gave HTTP response to HTTPS client
  10. Cannot forward ... response ... committed
  11. LintCode—删除排序链表中的重复元素(112)
  12. UVA12235 - Help Bubu
  13. 十三、商城 - 商城架构-分布式Dubbo(1)
  14. linux安装xbox无线手柄,想不到xbox手柄配对方法居然还有3个【详解】
  15. win8dns服务器没响应,win8笔记本dns服务器未响应怎么办
  16. 「星火计划沙龙视频」腾讯自研Kona JDK技术分享
  17. 计算机专业,真的这么赚钱吗?
  18. Elasticsearch - 压测方案之 esrally 简介
  19. Pyhon 使用simpleCV包
  20. 两个脚本解决打开安卓模拟器时会显示黑框cmd的问题

热门文章

  1. mysql 本日、本周、本月、本年 统计
  2. 使用Docker容器,这些错误千万别犯
  3. 读书笔记:《从一到无穷大》
  4. 国内外云主机,美国主机,香港主机,日本主机,韩国主机,选择使用与对比
  5. 【UE4】在 Content 目录中查看、筛选资产
  6. teradata ttu_Teradata Studio中文乱码解决方法
  7. 飞机订票系统测试用例
  8. Git版本控制__分支管理
  9. 【java-Date】
  10. android diy固件,官方固件不给力?咱自己DIY!手把手教你修改固件!