我正在通过C++接口使用opencv。我知道我可以使用cv::Mat::operator=(const Scalar& s)或cv::Mat::setTo()将cv::Mat设置为特定值。但我如何将作为参数传递给我的函数的cv::Mat设置为它的最大可能值?
cv::Mat::operator=(const Scalar& s)
cv::Mat::setTo()
cv::Mat
wnvonmuf1#
首先,这取决于你的矩阵是什么类型,8UC1是8位无符号字符,最大值是255。32SC1的最大值是最大整数值,如果我没记错的话,最大值64FC1是最大双精度值。通常我会这样做。
/* Test with small matrix */ cv::Mat matrix_1( 2, 2, CV_32FC3, Scalar::all( std::numeric_limits<float>::max() ) ); /* Subsequent assigment is something like this */ matrix_1 = Scalar::all( std::numeric_limits<float>::max() ); cout << matrix_1 << endl; /* Test with integer matrix */ cv::Mat matrix_2( 2, 2, CV_32SC2, Scalar::all( std::numeric_limits<int>::max() ) ); /* Subsequent assigment is something like this */ matrix_2 = Scalar::all( std::numeric_limits<int>::max() ); cout << matrix_2 << endl;
如果是8UC型,就用255,如果是64FC型,就用double型。
vhmi4jdf2#
派对迟到太久了,但不管怎样:我只是尝试解决完全相同的问题,并使用elemSize1()工作。cv::pow(2, 8*src->elemSize1())-1给出给定cv::Mat的最大灰度值。
cv::pow(2, 8*src->elemSize1())-1
2条答案
按热度按时间wnvonmuf1#
首先,这取决于你的矩阵是什么类型,8UC1是8位无符号字符,最大值是255。32SC1的最大值是最大整数值,如果我没记错的话,最大值64FC1是最大双精度值。
通常我会这样做。
如果是8UC型,就用255,如果是64FC型,就用double型。
vhmi4jdf2#
派对迟到太久了,但不管怎样:
我只是尝试解决完全相同的问题,并使用elemSize1()工作。
cv::pow(2, 8*src->elemSize1())-1
给出给定cv::Mat的最大灰度值。