#include <opencv2/opencv.hpp>
#include <vector>
int main() {
// 假设我们有一个float类型的vector,它包含我们想要转换的数据
std::vector<float> floatData = {10.0f, 20.0f, 30.0f, 255.0f, 0.0f, 127.5f};
// 创建一个与floatData相同大小的Mat对象,类型为CV_32F
cv::Mat floatMat(floatData.size(), 1, CV_32F);
// 将floatData的数据复制到floatMat中
memcpy(floatMat.data, floatData.data(), floatData.size() * sizeof(float));
// 创建一个用于存储转换结果的Mat对象,类型为CV_8U
cv::Mat uint8Mat;
// 将floatMat的数据范围缩放到0-255,并转换为uint8类型
floatMat.convertTo(uint8Mat, CV_8U, 255.0 / (floatMat.max() - floatMat.min()), -floatMat.min() * 255.0 / (floatMat.max() - floatMat.min()));
// 打印转换后的数据
std::cout << "Converted uint8 Mat:" << std::endl;
for (int i = 0; i < uint8Mat.rows; ++i) {
std::cout << (int)uint8Mat.at<uchar>(i, 0) << " ";
}
std::cout << std::endl;
return 0;
}
#include <vector>
int main() {
// 假设我们有一个float类型的vector,它包含我们想要转换的数据
std::vector<float> floatData = {10.0f, 20.0f, 30.0f, 255.0f, 0.0f, 127.5f};
// 创建一个与floatData相同大小的Mat对象,类型为CV_32F
cv::Mat floatMat(floatData.size(), 1, CV_32F);
// 将floatData的数据复制到floatMat中
memcpy(floatMat.data, floatData.data(), floatData.size() * sizeof(float));
// 创建一个用于存储转换结果的Mat对象,类型为CV_8U
cv::Mat uint8Mat;
// 将floatMat的数据范围缩放到0-255,并转换为uint8类型
floatMat.convertTo(uint8Mat, CV_8U, 255.0 / (floatMat.max() - floatMat.min()), -floatMat.min() * 255.0 / (floatMat.max() - floatMat.min()));
// 打印转换后的数据
std::cout << "Converted uint8 Mat:" << std::endl;
for (int i = 0; i < uint8Mat.rows; ++i) {
std::cout << (int)uint8Mat.at<uchar>(i, 0) << " ";
}
std::cout << std::endl;
return 0;
}