【发布时间】:2012-01-30 17:29:00
【问题描述】:
如果我有一个矩阵
cv::Mat M;
乘以一个常数
双c;
使用
结果=c*A;
其中 c 介于 0 和 1 之间
如何处理数据?我知道数据是uchar。如果像素值为 26 且 c=0.2,结果会是 截断(26*0.2)=5?
提前非常感谢, 彼得。
【问题讨论】:
标签: opencv matrix floating-point char constants
如果我有一个矩阵
cv::Mat M;
乘以一个常数
双c;
使用
结果=c*A;
其中 c 介于 0 和 1 之间
如何处理数据?我知道数据是uchar。如果像素值为 26 且 c=0.2,结果会是 截断(26*0.2)=5?
提前非常感谢, 彼得。
【问题讨论】:
标签: opencv matrix floating-point char constants
1.) 数据不一定是 uchar 类型。
2.) 是的。您可以自己查看
cv::Mat m = cv::Mat::ones(3 , 1, cv::DataType<unsigned char>::type);
double c = 0.2;
m.at<unsigned char>(0 , 0) = 26;
m.at<unsigned char>(1 , 0) = 27;
m.at<unsigned char>(1 , 0) = 28;
cv::Mat res = c * m;
cout << "res = "<< endl << " " << res << endl << endl;
【讨论】:
【讨论】:
在 cvDiv 的 cmets 中,我发现以下内容:
/* element-wise division/inversion with scaling:
dst(idx) = src1(idx) * scale / src2(idx)
or dst(idx) = scale / src2(idx) if src1 == 0 */
CVAPI(void) cvDiv( const CvArr* src1, const CvArr* src2,
CvArr* dst, double scale CV_DEFAULT(1));
或许您可以使用“scale”参数作为常数,并将 src1 指定为 0。
【讨论】: