十八、图像像素类型转换和归一化操作

项目功能实现:对一张图像进行类型转换和归一化操作
按照之前的博文结构来,这里就不在赘述了

一、头文件

norm.h

#pragma once#include<opencv2/opencv.hpp>using namespace cv;class NORM {
public:void norm(Mat& image);
};#pragma once

二、函数实现

norm.cpp

Ⅰ,像素类型转换

image.convertTo(image, CV_32FC3);
将image(第一个)转换为CV_32FC3类型,最终输出为image(第二个)

对于数据类型而言,其结构为:CV_<bit_depth>(S|U|F)C<number_of_channels>
例如:CV_32FC3 细分:CV_ 32 F C3
32表示每个像素点值所占32bit
F表示Float单精度浮点数
C3表示4通道图像,为啥呢?C表示通道数,C1是单通道、C2是三通道、C3是四通道,多了一个alpha透明度通道,PNG格式里面就有alpha通道
当然也可以省略,默认为C1

其实就三个参数而已,总结一下

参数一(CV_32FC3)参数二(CV_32FC3)参数三(CV_32FC3) 该参数可省略,默认为C1
8S:signed int,有符号整形C1:单通道
16U:unsigned int,无符号整形C2:三通道
32F:float,单精度浮点型C3:四通道,多了一个alpha通道
64
表示每个像素点值所占的bit位

Ⅱ,归一化

normalize(image, result, 1.0, 0, NORM_MINMAX);
参数一:处理对象为image
参数二:输出结果为result
参数三:alpha
参数四:beta
参数五:不同归一化操作,包括:NORM_L1、NORM_L2、NORM_INF、NORM_MINMAX

NORM_L1:
1,求解image图片中所有像素点绝对值之和sum
2,result[0,0] = (alpha * image[0,0]) / sum,得到result的第一个像素值,以此类推得到result图像

NORM_L2:
1,求解image图片中各像素点值的平方和的开方sum(也就是L2-范数)
2,result[0,0] = (alpha * image[0,0]) / sum,得到result的第一个像素值,以此类推得到result图像

NORM_INF:
1,求解image图片中所有像素点值最大的那个max
2,result[0,0] = (alpha * image[0,0]) / max,得到result的第一个像素值,以此类推得到result图像

NORM_MINMAX:
1,alpha和beta系统会自动判断出最大值和最小值,分别赋值为max和min
2,根据公式计算出result的每个像素点的值
在这里插入图片描述

#include"norm.h"
#include<iostream>
#include<opencv2/opencv.hpp>void NORM::norm(Mat& image) {Mat result;std::cout << image.type() << std::endl;image.convertTo(image, CV_32FC3);std::cout << image.type() << std::endl;normalize(image, result, 1.0, 0, NORM_MINMAX);std::cout << result.type() << std::endl;imshow("norm",result);
}

三、主函数

yy_main.cpp

#include <opencv2/opencv.hpp>
#include <iostream>
#include "norm.h"using namespace cv;
using namespace std;int main(int argc, char** argv) {Mat src = cv::imread("E:/C++_workspace/beyond.jpg", IMREAD_COLOR);if (src.empty()) {printf("load image is false...\n");return -1;}namedWindow("yanyu", WINDOW_FREERATIO);imshow("yanyu", src);NORM yy;yy.norm(src);waitKey(0);destroyAllWindows();return 0;
}

项目结构如下:
在这里插入图片描述

运行结果如下:
在这里插入图片描述
因为是纯白色的背景,归一化效果不太明显

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/485742.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【EI会议征稿通知】2024年软件自动化与程序分析国际学术会议(SAPA 2024)

2024年软件自动化与程序分析国际学术会议&#xff08;SAPA 2024) 2024 International Conference on Software Automation and Program Analysis 在当今科技社会中&#xff0c;软件产业呈快速发展趋势&#xff0c;软件自动化与程序分析技术在提高软件质量、降低开发成本、提升…

如何使用Express框架构建一个简单的Web应用

在这个数字化时代&#xff0c;Web应用的需求越来越多样化和复杂化。在前端开发领域&#xff0c;Express框架作为一个快速、灵活的Node.js Web应用程序框架&#xff0c;拥有强大的功能和丰富的生态系统&#xff0c;深受开发者们的青睐。本篇博客将带您一步步探索如何使用Express…

Spring之AOP源码解析(上)

Aop相关注解 EnableTransactionManagementEnableAspectJAutoProxyEnableAsync... 从注解切入来看看这些注解都干了什么 Import注解作用简述 注入的类一般继承ImportSelector或者ImportBeanDefinitionRegistrar接口 继承ImportSelector接口&#xff1a;selectImports方法返回…

通信入门系列——锁相环、平方环、Costas环

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 本节目录 一、锁相环 1、压控振荡…

设计模式-创建型模式-原型模式

原型模式&#xff08;Prototype Pattern&#xff09;&#xff1a;使用原型实例指定创建对象的种类&#xff0c;并且通过克隆这些原型创建新的对象。原型模式是一种对象创建型模式。原型模式其实就是从一个对象再创建另外一个可定制的对象&#xff0c;而且不需知道任何创建的细节…

JSON语法

后端开发需要了解的JSON的语法。 示例&#xff1a; {"name": "shw","age": 38,"isStudent": true,"courses": ["Math", "Physics"],"hair":{"color":"black","le…

初识表及什么是数据表

一、了解表 1.1.概述 表是处理数据和建立关系型数据库及应用程序的基本单元&#xff0c;是构成数据库的基本元素之一&#xff0c;是数据库中数据组织并储存的单元&#xff0c;所有的数据都能以表格的形式组织&#xff0c;目的是可读性强。 1.2.表结构简述 一个表中包括行和列…

Linux常用基础命令(下)

进程管理 进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程&#xff0c;是操作系统进行 资源分配和调度的一个独立单位&#xff0c;是应用程序运行的载体。 Linux进程管理相关命令 ps &#xff1a;用于报告当前系统的进程状态 -a:显示所有用户的进程-u:…