首页 > 编程语言 >【C++】【OpenCV-4.9.0】灰度图取反(Mat属性的使用)

【C++】【OpenCV-4.9.0】灰度图取反(Mat属性的使用)

时间:2024-03-04 20:23:56浏览次数:24  
标签:gray Mat img 取反 灰度 include cv reverse

  此次我们将一张图像转灰度后再进行灰度取反,即黑的变白的,白的变黑的,所以我们需要获取每个像素点上的灰度级,cv中提供了一个函数at,但是这个函数还有11个重载函数,太多了,我们只用这次需要用到的,即通过读取像素点的位置来获取灰度级。

◆ at() [3/12]

template<typename _Tp > const_Tp& cv::Mat::at(int row,           int col           )
Parameters   row  在0维的方向进行索引   col   在1维的方向进行索引   可以看到,at是一个模板函数,其返回类型为传入指定的类型。
 1 #include <iostream>
 2 #include <fstream>
 3 #include <opencv2/highgui/highgui.hpp>
 4 #include <opencv2/imgproc/imgproc.hpp>
 5 using namespace std;
 6 
 7 int main(int argc, char** argv) {
 8     cv::Mat img, gray, reverse_gray;
 9     cv::pyrDown(cv::imread(argv[1]), img);
10 
11     cv::namedWindow("src_img", cv::WINDOW_AUTOSIZE);
12     cv::imshow("src_img", img);
13 
14     cv::cvtColor(img, gray, cv::COLOR_BGR2GRAY);
15     cv::namedWindow("gray_img", cv::WINDOW_AUTOSIZE);
16     
17 
18     gray.copyTo(reverse_gray);
19     cout << img.size << endl;
20     for (int i = 0; i < img.size[1]; ++i) {
21         for (int j = 0; j < img.size[0]; ++j) {
22             uchar& gray_scale = reverse_gray.at<uchar>(j, i);
23             gray_scale = 255 - gray_scale;
24         }
25     }
26     cv::namedWindow("reverse_gray", cv::WINDOW_AUTOSIZE);
27     cv::imshow("reverse_gray", reverse_gray);
28     cv::imshow("gray_img", gray);
29     cv::waitKey(0);
30 
31     return 0;
32 }

我们依次来说明上述代码:

1、对传入的图像进行降采样从而缩小图像

2、将原图转换为灰度图

3、深拷贝灰度图,并将拷贝到的灰度图进行灰度级反转,其中size返回的数据依次代表是列数和行数,一般来说遍历是行列顺序,这一点需要注意,然后是at传入的参数,是以列行的形式传入的。使用255减去当前像素点的灰度级即可完成反转。

标签:gray,Mat,img,取反,灰度,include,cv,reverse
From: https://www.cnblogs.com/vangoghpeng/p/18052572

相关文章

  • 基于yolov2深度学习网络的火焰烟雾检测系统matlab仿真
    算法运行效果图预览  2.算法运行软件版本MATLAB2022a 3.算法理论概述       YOLO(YouOnlyLookOnce)是一种实时目标检测算法,其核心特点是将目标检测视为一个回归问题,一次性预测出图像中所有目标的位置和类别。YOLOv2是YOLO算法的改进版本,由JosephRedmon等......
  • 基于EKF扩展卡尔曼滤波的传感器网络目标跟踪matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本MATLAB2022a 3.算法理论概述       随着传感器网络技术的不断发展,目标跟踪作为其核心应用之一,在军事、民用等领域中得到了广泛的关注。扩展卡尔曼滤波(EKF)作为一种有效的非线性滤波方法,被广泛应用于传感器网络......
  • matlab教程_台大lecture1基本操作和矩阵输入
    matlab教程视频matlabascalculatorcommendline直接用命令行计算部分ans是结果运算法则和平时一样((),^乘除加减)onlinehelpeg:helpsin&直接搜索嵌套式公式sin(cos(pi))==cos(pi)sin(ans)其中,ans是第一个的结果变量可以用who查看变量,whos详细信息一些保留......
  • MaterialDesignInXamlToolkit 5.0 发布
    5.0.0发布这是一个重大版本更新,又许多破坏性变化升级到5.0.0版本,请参考:https://www.cnblogs.com/sesametech-dotnet/p/18028565变化关键性变化Allowfortransparentcolorsforgeneratediconsby@Kebooin#3273AddnewoptionstotheExpanderAssistclassby@Abd......
  • matplotlib直方图
    matplotlib直方图假设你获取了250部电影的时长(列表a中),希望统计出这些电影时长的分布状态(比如时长为100分钟到120分钟电影的数量,出现的频率)等信息,你应该如何呈现这些数据?frommatplotlibimportpyplotasplta=[131,98,125,131,124,139,131,117,128,108,......
  • matplotlib条形图
    matplotlib条形图假设你获取到了2017年内地电影票房前20的电影(列表a)和电影票房数据(列表b),那么如何更加直观的展示该数据?frommatplotlibimportpyplotasplta=["WolfWarrior2","FastandFurious8","KungFuYoga","JourneytotheWest","Transformers5......
  • matplotlib散点图
    matplotlib散点图假设通过爬虫你获取到了北京2016年3,10月份每天白天的最高气温(分别位于列表a,b),那么此时如何寻找出气温和随时间(天)变化的某种规律?frommatplotlibimportpyplotaspltx_3=range(1,32)x_10=range(51,82)y_3=[11,17,16,11,12,11,12,6,6,7,......
  • m基于OFDM+QPSK和LDPC编译码以及LS信道估计的无线图像传输matlab仿真,输出误码率,并用
    1.算法仿真效果matlab2022a仿真结果如下:   2.算法涉及理论知识概要        无线图像传输:图像数据首先被分割成多个数据包,然后每个数据包经过LDPC编码,接着按OFDM符号映射规则将编码后的比特流映射到各个子载波上进行QPSK调制。在接收端,先利用LS信道估计恢复出......
  • 基于深度学习的红肉新鲜过期判决系统matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本MATLAB2022a 3.算法理论概述      随着生活水平的提高,人们对食品安全和质量的关注度日益增加。红肉作为重要的食品来源,其新鲜度的检测对于保障消费者权益和食品安全至关重要。传统的红肉新鲜度检测方法多依赖于人工......
  • 基于CNN-GRU-Attention的时间序列回归预测matlab仿真
    1.算法运行效果图预览 2.算法运行软件版本matlab2022a 3.算法理论概述        CNN-GRU-Attention模型结合了卷积神经网络(CNN)、门控循环单元(GRU)和注意力机制(Attention)来进行时间序列数据的回归预测。CNN用于提取时间序列的局部特征,GRU用于捕获时间序列的长期......