CMakeLists.txt
cmake_minimum_required(VERSION 2.6) # requirement of cmake version
PROJECT(opencvTest_1.0) # project name
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") # set the directory of executable files
set(CMAKE_BUILD_TYPE Debug)
set(OpenCV_DIR "/home/opencv-3.4.16/build") # 如果你的opencv找不到,可以自己指定目录
find_package(OpenCV REQUIRED) # find required opencv
include_directories(${OpenCV_INCLUDE_DIRS}) # directory of opencv headers
add_executable(${PROJECT_NAME} opencvTest.cpp) # name of executable file and path of source file
link_directories(${OpenCV_LIBRARY_DIRS}) # directory of opencv library,没有也可以
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS}) # opencv libraries
opencvTest.cpp
#include <opencv2/opencv.hpp>
#include <iostream>
#include <ctime>
using namespace std;
using namespace cv;
void Normalization_img(cv::Mat& image,
cv::Mat &outputImage,
float alpha = 0.0f,
vector<float> mean_ = {0.485f, 0.456f, 0.406f},
vector<float> std_={0.229f, 0.224f, 0.225f}
) {
for (size_t i = 0; i < outputImage.rows; i++)
{
for(size_t j = 0; j < outputImage.cols; j++)
{
if(alpha > 0.0f){
outputImage.at<Vec3f>(i,j)[0] = static_cast<float>(image.at<Vec3b>(i,j)[0])*alpha;
outputImage.at<Vec3f>(i,j)[1] = static_cast<float>(image.at<Vec3b>(i,j)[1])*alpha;
outputImage.at<Vec3f>(i,j)[2] = static_cast<float>(image.at<Vec3b>(i,j)[2])*alpha;
}else{
outputImage.at<Vec3f>(i,j)[0] = (static_cast<float>(image.at<Vec3b>(i,j)[0])/255.0f-mean_[0])/std_[0];
outputImage.at<Vec3f>(i,j)[1] = (static_cast<float>(image.at<Vec3b>(i,j)[1])/255.0f-mean_[1])/std_[1];
outputImage.at<Vec3f>(i,j)[2] = (static_cast<float>(image.at<Vec3b>(i,j)[2])/255.0f-mean_[2])/std_[2];
}
}
}
}
int main(int argc, char** argv)
{
clock_t start,elpased;
cv::Mat image = cv::imread("test_images/2.bmp",IMREAD_COLOR);
cv::Mat outputImage = cv::Mat::eye(image.rows,image.cols,CV_32FC3);
start = clock();
Normalization_img(image,outputImage, 1.f / 255.0);
elpased = clock() - start;
std::cout <<"自定义时间消耗:"<< (float)elpased/CLOCKS_PER_SEC*1000<<"ms" << std::endl;
cv::Mat outputImage1(outputImage,cv::Rect(0,0,3,2));
std::cout<<"outputImage="<< outputImage1<<std::endl;
Mat inner_255;
start = clock();
image.convertTo(inner_255, CV_32FC3, 1.f / 255.0);
elpased = clock() - start;
cv::Mat inner_2551(inner_255,cv::Rect(0,0,3,2));
std::cout<<"inner_2551="<< inner_2551<<std::endl;
std::cout <<"convertTo时间消耗:"<< (float)elpased/CLOCKS_PER_SEC*1000<<"ms" << std::endl;
return 0;
}