gpt4 book ai didi

OpenCV 转换为更小的数据类型 : Max, 或截断/溢出?

转载 作者:太空宇宙 更新时间:2023-11-03 22:30:58 24 4
gpt4 key购买 nike

对于我正在进行的项目,我需要通过带通滤波器传递视频缓冲区。带通滤波器包括 FFT 和 IFFT,以及通带外频率的平坦化。为了实现这一点,我需要有比标准 uchar 类型可用的更多空间来存储值,因此我暂时将我的视频帧转换为 CV_64F,并计划将它们转换回 CV_8UC3。这是我的问题:

将 cv::Mat 数据从大数据类型转换为小数据类型时,OpenCV 的行为是什么?更具体地说,如果我在具有 CV_64F 数据的 cv::Mat 对象中的值大于 CV_8U 中单个数据点的最大可能值,OpenCV 是否将目标数据设置为该数据类型的最大可能值,或者我们有溢出或截断问题吗?

最佳答案

只是写了一个简单的程序来弄清楚它是如何工作的:

#include <iostream>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std;
int main() {
cv::Mat img1(cv::Size(2,2), CV_64F);
img1 = cv::Scalar(5000000);
cv::Mat img2;
img1.convertTo(img2, CV_8U);
for(int i = 0; i < img2.rows; i++) {
for(int j = 0; j < img2.cols; j++) {
unsigned char tmp = img2.at<uchar>(i, j);
cout << (int)tmp << endl;
}
}
return 0;
}

<code>pkg-config --cflags --libs opencv</code> 编译它并运行它。 4 行输出为 255。

结论:当从较大的数据类型转换为较小的数据类型时,如果源数据是较大的值,OpenCV 会将较小的数据类型值设置为最大可能值。换句话说,大于 unsigned char 最大值的值 500,000 在转换为 CV_8U 时将设置为 255。

关于OpenCV 转换为更小的数据类型 : Max, 或截断/溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24816665/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com