項目功能實現:對一張圖像進行類型轉換和歸一化操作
按照之前的博文結構來,這里就不在贅述了
一、頭文件
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_32 FC3) | 參數二(CV_32F C3) | 參數三(CV_32FC3 ) 該參數可省略,默認為C1 |
---|---|---|
8 | S:signed int,有符號整形 | C1:單通道 |
16 | U:unsigned int,無符號整形 | C2:三通道 |
32 | F: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;
}
項目結構如下:
運行結果如下:
因為是純白色的背景,歸一化效果不太明顯