【发布时间】:2016-08-15 02:49:17
【问题描述】:
即使我的输入图像是 16 位,我也想以 8 位执行轮廓。给定raw 类型为16UC3 的输入图像,我找到每个通道的最小值/最大值与
double min, max;
double min0, max0;
double min1, max1;
double min2, max2;
cv::minMaxLoc(raw, &min, &max);
cv::minMaxLoc(channel(raw,0), &min0, &max0);
cv::minMaxLoc(channel(raw,1), &min1, &max1);
cv::minMaxLoc(channel(raw,2), &min2, &max2);
fprintf(stderr, "max = %f %f %f %f!\n", max, max0, max1, max2);
channel 由
cv::Mat channel(cv::Mat A, int ich) {
cv::Mat C[3];
for(int i = 0; i < 3; i++) {
C[i] = cv::Mat::zeros( cv::Size(A.rows, A.cols), A.type());
}
cv::split(A, C);
return C[ich];
}
然后我尝试用
创建一个 8 位图像cv::Mat raw256(raw.clone());
raw.convertTo(raw256, CV_8UC3);
但是当我打印出相同的信息时:
cv::minMaxLoc(raw256, &min, &max);
cv::minMaxLoc(channel(raw256,0), &min0, &max0);
cv::minMaxLoc(channel(raw256,1), &min1, &max1);
cv::minMaxLoc(channel(raw256,2), &min2, &max2);
我得到了非常不同的结果,如图所示:
max = 29952.000000 0.000000 29952.000000 26880.000000!
max = 255.000000 0.000000 255.000000 255.000000!
这也会导致我的程序稍后出现段错误。我在构造 raw256 时做错了什么,这正在改变值?
【问题讨论】:
标签: c++ opencv type-conversion