OpenCV: умножить матрицу на константу в диапазоне (0,1).Как обрабатываются данные? - PullRequest
1 голос
/ 30 января 2012

Если у меня есть матрица

cv :: Mat M;

и умножьте его на постоянную

двойной с;

с помощью

Результат = C * A;

, где c находится между 0 и 1

как обрабатываются данные? Я понимаю, что данные учар. Если значение пикселя равно 26 и с = 0,2, результат будет усечение (26 * 0,2) = 5

Большое спасибо заранее, Питер.

Ответы [ 3 ]

1 голос
/ 30 января 2012

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;
0 голосов
/ 14 марта 2013

В комментариях к cvDiv я нашел следующее:

/* 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.

0 голосов
/ 30 января 2012

Согласно OpenCV документы , данные преобразуются в двойные, необходимые операции выполняются с ними, а затем приводятся к типу назначения:

dst = (dst_type)((double)src*a+b);

где a и b - двойные константы

...