首页 > 编程语言 >c++ opencv 16bit tiff图像学习笔记

c++ opencv 16bit tiff图像学习笔记

时间:2023-09-04 11:46:51浏览次数:40  
标签:src %. val int tiff c++ opencv 2f printf

1、读取图像基本信息:长、宽、通道数、灰度最大值、最小值、均值、方差值和灰度直方图

#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    //  读入图像
    Mat src = imread("C:\\Users\\MingYi-LZQ\\Desktop\\1.tif", IMREAD_UNCHANGED);
    if (src.empty())
    {
        printf("不能找到文件。\n");
        return -1;
    }
    namedWindow("input", WINDOW_NORMAL);
    imshow("input", src);

    int height = src.rows;
    int width = src.cols;
    int ch = src.channels();
    printf("宽:%d 高:%d 通道数:%d\n", width, height, ch);

    double min_val;
    double max_val;
    Point minloc;
    Point maxloc;
    minMaxLoc(src, &min_val, &max_val, &minloc, &maxloc);
    printf("最小值:%.2f 最大值:%.2f\n", min_val, max_val);

    //  均值方差
    Scalar s = mean(src);
    Mat mm, mstd;
    meanStdDev(src, mm, mstd);
    int rows = mstd.rows;
    printf("rows:%d\n", rows);
    if (rows == 1) {
        printf("均值: %.2f\n", s[0]);
        printf("方差: %.2f\n", mstd.at<double>(0, 0));
    }
    else if (rows == 3) {
        printf("均值: %.2f   %.2f   %.2f\n", s[0], s[1], s[2]);
        printf("方差: %.2f   %.2f   %.2f\n", mstd.at<double>(0, 0), mstd.at<double>(1, 0), mstd.at<double>(2, 0));
    }

    //  像素值统计信息,统计灰度直方图
    int bins = 256;
    vector<int> hist(bins);
    //  初始化灰度直方图
    for (int i = 0; i < bins; i++)
        hist[i] = 0;
    double bin_width = (max_val - min_val) / bins;
    printf("bins: %d    bin_width: %.3f\n", bins, bin_width);

    int index = 0;
    //统计灰度直方图
    for (int row = 0; row < height; row++)
    {
        for (int col = 0; col < width; col++)
        {
            int pv = src.at<ushort>(row, col);
            if (pv >= min_val && pv <= max_val) {
                index = (pv - min_val) / bin_width;
                if (index == bins)
                    index--;
                hist[index]++;
            }
        }
    }
    waitKey(0);
    destroyAllWindows();
    return 0;
}
View Code

 由于该图的基本有效信息都在低灰度值区域内,所以原图基本呈黑色

 

标签:src,%.,val,int,tiff,c++,opencv,2f,printf
From: https://www.cnblogs.com/lizhiqiang0204/p/17676499.html

相关文章

  • c++单例模式总结
    分类懒汉式:实例对象在第一次被使用时才进行初始化。饿汉式:实例在定义时就被初始化。特点1、构造函数和析构函数私有化,不允许外部创建实例对象。2、拷贝构造函数和复制运算符重载被delete,不允许产生新的实例。3、内部定义一个私有的静态数据成员,该成员为本类的实例化对象。4......
  • c++11关键字
    decltype关键字:查询关键字的数据类型#语法:decltype(expression)var;1)如果expression是没有用括号括起来的标识符(不包括decltype本身的括号,则var的类型与该标识符的类型相同,包括const等限定符,注意如果返回值为引用时需要先初始化2)如果expression是函数调用,则var的类型与......
  • Lnton羚通AI云算力平台在OpenCV-Python中如何格式化文本打印
     在不同的编程语言中,有多种方法可以用来格式化文本打印:1.字符串插值/插值字符串:这是一种简单的格式化文本的方法,通过在字符串中插入变量或表达式来实现。不同编程语言中插值字符串的实现方式可能有所不同。例如,在Python中,我们可以使用f-string(格式化字符串字面值)来实现字符串插值......
  • Google C++编程规范(Google C++ Style Guide)
    参考链接:Google代码规范C++总结Google开源项目风格指南——中文版GoogleC++StyleGuide是一份不错的C++编码指南,我制作了一张比较全面的说明图,可以在短时间内快速掌握规范的重点内容。不过规范毕竟是人定的,记得活学活用。看图前别忘了阅读下面两条重要建议:保持一致也......
  • C/C++ const关键字 解读
    Thecollocationbetweenconstandoriginalpointerisconfusedtomanypeople.Therearetwousagesofit.Thefirstoneisavariablepointerthatpointsaconstantdata.i.e.constint*p#include<iostream>intmain(){ inta=1,b=2; const......
  • Lnton羚通AI云算力平台在OpenCV-Python中如何创建计数器
    CVUI之计数器cvui::counter()为一个整型或者double值渲染一个计数器,可以点击向上或向下增加或减少值。PythonCPP原型参数theWhere:画布theX:绘制的XtheY:绘制的YtheValue:值theStep:间隔theFormat:格式化的值或数字。例如,%d或%.2f。theFontScale:字体大小theInsideColo......
  • C++算法之旅、05 基础篇 | 第二章 数据结构
    常用代码模板2——数据结构-AcWing笔试用数组模拟而不是结构体使用结构体指针,newNode()非常慢,创建10万个节点就超时了,做笔试题不会用这种方式(优化是提前初始化好数组,但这样跟数组模拟没区别了,而且代码量很长)单链表(数组)使用两个数组,e存储val,ne存储next。空节点next用-1表......
  • 《C++并发编程实战》读书笔记(2):线程间共享数据
    1、使用互斥量在C++中,我们通过构造std::mutex的实例来创建互斥量,调用成员函数lock()对其加锁,调用unlock()解锁。但通常更推荐的做法是使用标准库提供的类模板std::lock_guard<>,它针对互斥量实现了RAII手法:在构造时给互斥量加锁,析构时解锁。两个类都在头文件<mutex>里声明。std::......
  • msvc++中的预编译头文件pch.hpp和stdafx.h
    预编译头文件在VisualStudio中创建新项目时,会在项目中添加一个名为pch.h的“预编译标头文件”。(在VisualStudio2017及更高版本中,该文件名为stdafx.h)此文件的目的是加快生成过程。应在此处包含任何稳定的标头文件,例如标准库标头(如)。预编译标头仅在它或它包含的任何......
  • C++引用
    首先引用是什么?在教程里说引用就是起别名。在我学过这一部分后觉得引用其实就是属于指针,有点像是指针的语法缩写。怎么说呢,我认为就两点三种传递引用是什么,引用的本质1、三种传递值传递不改变实参,地址传递和引用传递改变实参1#include<iostream>2usingnamespaces......