opencv 基本操作:

https://blog.csdn.net/jacke121/article/details/110144885

目录

mat转float vecotr

3.4.8 normalize

3个通道分别处理

标准化减均值除方差

二、深度转换–convertTo()


mat转float vecotr

一行代码也可以:

image是int类型,float类型都可以:

std::vector<float> inputTensorValues=(std::vector<float>)(image.reshape(1, 1));

vector转mat,

OpenCV实现Mat与vector,Mat与数组互转_pan_jinquan的博客-CSDN博客_mat vector

下面是封装的:

template<typename _Tp>
vector<_Tp> convertMat2Vector(const Mat& mat)
{return (vector<_Tp>)(mat.reshape(1, 1));//通道数不变,按行转为一行
}cv::Mat dst = cv::Mat::zeros(srcResize.size(), CV_32FC3);srcResize.convertTo(dst, CV_32FC3);// , 10, -1);Mat_L2_mormal(dst);//for (int a = 0; a < 20; a++) {//  cout << (int)srcResize.at<uchar>(0, a) << " ";// ok int//   cout << ((float*)(srcResize.data))[a] << " ";//error//}cout << "\n Mat_L2_mormal \n";for (int a = 0; a < 20; a++) {cout << (float)dst.at<float>(0, a) << " ";// ok floatcout << ((float*)(dst.data))[a] << " ";// ok float//cout << setprecision(3) << ((float*)(srcimg.data))[a] << " ";}cout << "\n CV_32FC3 \n";//for (int a = 0; a < 20; a++) {//   cout << setprecision(3) << ((double*)(dst.data))[a] << " ";//error//}vector<float> v_mat = convertMat2Vector<float>(dst);

3.4.8 normalize

c++默认是uint8,uchar类型,归一化需要数据转换,在3.4.8版本下,没有试验成功

在3.4.8版本下,先转换类型,再进行除法操作,也没试验成功。

这个可以:文章后面有3通道分别归一化:

Mat img = cv::imread("bar1.jpg");img.convertTo(img, CV_32FC1);normalize(img, img, 1.0, 0.0, NORM_MINMAX);cout << img << endl;

后面有vector<double>的成功了,

可能是最后transpose没有做,导致的失败?

1.函数原型

void cv::normalize(InputArry src,InputOutputArray dst,double alpha=1,double beta=0,int norm_type=NORM_L2,int dtype=-1,InputArray mark=noArry())

2.函数作用

归一化数据。该函数分为范围归一化与数据值归一化。(Normalizes the norm or value range of an array.)

3.参数说明

src               输入数组;

dst               输出数组,数组的大小和原数组一致;

alpha           1,用来规范值,2.规范范围,并且是下限;

beta             只用来规范范围并且是上限;

norm_type   归一化选择的数学公式类型;

dtype           当为负,输出在大小深度通道数都等于输入,当为正,输出只在深度与输如不同,不同的地方游dtype决定;

mark            掩码。选择感兴趣区域,选定后只能对该区域进行操作。

4.归一化选择的数学公式类型介绍(norm_type)

设数组中原有{A1,A2,A3...An}

NORM_L1:

NORM_INF:

NORM_L2:

NORM_MINMAX:(AK不属于{max(Ai)},min(Ai),当AK等于max(Ai)时p=1,等于min(Ai)时p=0)

6.范围归一化与值归一化的区别

区别一:范围归一化使用的是如下式子,设范围为【0,255】

即把src缩放到【0,255】这个范围内,并不使用上面的4个公式去解。

区别二:使用范围归一化时,beta必有值不等于0

举例说明:

一 值归一化:

#include<opencv2/opencv.hpp>#include<iostream>using namespace std;int main(){vector<double>a={ 10,11,234,45,65,456,0 };cv::normalize(a, a, 1,0, cv::NORM_MINMAX);for (int i=0;i < a.size();i++){cout << a[i] << endl;}return 0;}

结果如下:

二 范围归一化

#include<opencv2/opencv.hpp>#include<iostream>using namespace std;int main(){vector<double>a={ 10,11,234,45,65,456,0 };cv::normalize(a, a, 0,255, cv::NORM_MINMAX);for (int i=0;i < a.size();i++){cout << a[i] << endl;}return 0;}

结果如下:

Opencv C++下的Mat归一化
void Mat_L2_mormal(cv::Mat &image)
{
    //mat*mat,
    cv::Mat out;
    out=(image) .mul (image);
    float sum=0.0;
    for (int i=0;i<image.rows;i++){
        sum=sqrt(cv::sum(out.row(i))[0]);
        image.row(i)=(image.row(i)/sum);
    }
    out.release();
}

3个通道分别处理

原文链接:https://blog.csdn.net/wuqingshan2010/article/details/107727909

std::vector<float> mean_value{0.406, 0.456, 0.485};
std::vector<float> std_value{0.225, 0.224, 0.229};
cv::Mat src, dst;
std::vector<cv::Mat> bgrChannels(3);
cv::split(src, bgrChannels);
for (auto i = 0; i < bgrChannels.size(); i++){bgrChannels[i].convertTo(bgrChannels[i], CV_32FC1, 1.0 / std_value[i], (0.0 - mean_value[i]) / std_value[i]);
}
cv::merge(bgrChannels, dst);

标准化减均值除方差

方法1只能针对float32类型的mat可以,int8的mat会报错。

//方法1
void Mat_L2_mormal(cv::Mat& image)
{float scale = 0.0078125f;float mean_value = 127.5f;for (int i = 0; i < image.rows; i++){for (int j = 0; j < image.cols; j++){image.at<Vec3f>(i, j)[0] = (image.at<Vec3f>(i, j)[0] - mean_value) * scale;image.at<Vec3f>(i, j)[1] = (image.at<Vec3f>(i, j)[1] - mean_value) * scale;image.at<Vec3f>(i, j)[2] = (image.at<Vec3f>(i, j)[2] - mean_value) * scale;}}}//方法2double minv = 0.0, max_v = 0.0;
minMaxIdx(image1, &minv, &maxv);for (int row = 0; row < face_img.rows; row++)
{for (int col = 0; col < face_img.cols; col++){for (int k = 0; k < 3; k++) {const auto src = face_img.at<cv::Vec3b>(row, col)[k];auto dst = 0.0;if (k == 0) dst = ((float(src) / max_v - 0.485) / 0.229) ;if (k == 1) dst = ((float(src) / max_v - 0.456) / 0.224) ;if (k == 2) dst = ((float(src) / max_v - 0.406) / 0.225) ;inputData[k * resize_w * resize_h + row * resize_w + col] = dst;}}
}

二、深度转换–convertTo()

2.1、API介绍

void convertTo( OutputArray dst, int rtype, double alpha=1, double beta=0 )
1
参数dst:输出图像;
参数rtype:要转换的深度;
参数alpha:对灰度值的缩放倍数;
参数beta:对灰度值得增量。
公式: dst = satyrate_cast(src * alpha + beta);

这个也是减均值128,归一化

 cv::cvtColor(imgResized, imgResized, cv::COLOR_RGB2BGR);//Mat_L2_mormal(imgResized);vector<Mat> bgr;cv::split(imgResized, bgr);bgr[0].convertTo(bgr[0], CV_32F, 1.f / 128.f, -1.f);bgr[1].convertTo(bgr[1], CV_32F, 1.f / 128.f, -1.f);bgr[2].convertTo(bgr[2], CV_32F, 1.f / 128.f, -1.f);

Opencv C++ 归一化相关推荐

  1. opencv图像归一化zscore_normalize

    opencv_图像归一化 #include <cv.h> #include <highgui.h>void zscoreNormalize(const cv::Mat& ...

  2. opencv像素归一化解释

    转载自:https://blog.csdn.net/Pierce_KK/article/details/90489397 图像的像素归一化是一个图像的预处理过程. 众所周知图像是由像素组成的,灰度图是 ...

  3. c++ opencv 基本操作

    下载地址: https://opencv.org/releases/ 归一化,转vector: Opencv C++ 归一化_jacke121的专栏-CSDN博客_c++ opencv 归一化 c++ ...

  4. OpenCV Python教程(3)(4)(5): 直方图的计算与显示 形态学处理 初级滤波内

    OpenCV Python教程(3.直方图的计算与显示) 本篇文章介绍如何用OpenCV Python来计算直方图,并简略介绍用NumPy和Matplotlib计算和绘制直方图 直方图的背景知识.用途 ...

  5. OpenCV--011:像素归一化

    引言 图像是由像素组成的.黑白图像是单个像素矩阵,而彩色图像中每个颜色通道都有单独的像素矩阵,比如:红色,绿色,蓝色等颜色通道. 像素值为0~255范围内的整数.虽然可以直接将原图像的像素数据直接作为 ...

  6. OpenCV之Python学习笔记

    RSS订阅 登陆 注册 原文链接地址:http://www.itozi.net/19477.html OpenCV之Python学习笔记 ITOZI 发布于 2015-08-06 分类:OpenSta ...

  7. RGB归一化及高效实现

    RGB归一化及高效实现 微信公众号:幼儿园的学霸 介绍 在图像处理中,RGB颜色模型是比较常用的格式,但是其存在一个明显的缺点:容易受到光照变化或阴影的影响,也就是说,同一位置,不同光照强度会导致图像 ...

  8. 归一化php,归一化函数normalize详解

    opencv 2 归一化函数normalize详解 1. 归一化定义与作用 归一化就是要把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内.首先归一化是为了后面数据处理的方便,其次是保 ...

  9. python normalize函数_归一化函数normalize详解

    opencv 2 归一化函数normalize详解 1. 归一化定义与作用 归一化就是要把需要处理的数据经过处理后 (通过某种算法)限制在你需要的一定范围内.首先归一化是为了后面数据处理的方便,其次是 ...

最新文章

  1. 给Python代码加上酷炫进度条的几种姿势
  2. bash之预定义变量
  3. 用C语言测试程序运行时间,c语言测试程序执行时间
  4. TF之LSTM:利用LSTM算法对mnist手写数字图片数据集(TF函数自带)训练、评估(偶尔100%准确度,交叉熵验证)
  5. 漫画 | 这样的男朋友,让我分分钟想剖腹自尽!
  6. java的System.getProperty()方法能够获取的值
  7. (计算机组成原理)第三章存储系统-第四节:主存储器和CPU的连接
  8. 4-2 VGGNet
  9. c语言的编译过程,从文本到可执行文件
  10. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_02-freemarker介绍
  11. Vue项目npm run dev后 报错Cannot GET /
  12. c语言 数组 迷宫,迷宫问题(C语言实现)
  13. C语言——32个关键字
  14. 细胞自动机 通用计算机,细胞自动机论
  15. android 4.4 root精灵,ROOT精灵: 支持安卓4.3/4.4机型一键ROOT
  16. OSChina 周六乱弹 —— 快上车,司机调休了
  17. PhantomJS+Selenium+Scrapy抓取巨潮资讯网企业信息
  18. 机器如何猜你所想?阿里小蜜预测平台揭秘
  19. python导入mysqldb_Python导入MySQLdb库
  20. AI智能润色改写,伪原创写作工具,毕业论文必备工具

热门文章

  1. 函数ZwQuerySystemInformation小结
  2. Android开发--图形图像与动画(四)--AnimationListener简介
  3. Android开发--Notification和PendingIntent
  4. java beans 组件_如何利用JavaBeans在应用程序中创建组件?
  5. nginx 正则匹配优化(一)
  6. libsigc++库的使用
  7. 装oracle非常卡吗,win7系统安装完oracle电脑变卡的解决方法
  8. python 寻找数组的中心索引_Leetcode724:寻找数组的中心索引(java、python3)
  9. 西安电子科技大学计算机全国排名第几,全国五所电子类高校排名,北京邮电大学排名第三...
  10. 除了 k8s,留给 k 和 s 中间的数字不多了!