2010-05-23 3 views
1

Я пытаюсь найти самый простой способ добавить, вычесть скалярное значение с помощью opencv 2.0 cv::Mat.Множественный скаляр OpenCV и матрица

Большая часть существующей функции допускает только матрично-матричные и матрично-скалярные операции.

Я ищу скалярно-матричные операции.

Я делаю это в настоящее время, создав временную матрицу с тем же скалярным значением и выполнив требуемую арифметическую операцию. Пример ниже ..

Mat M(Size(100,100), CV_8U); 
Mat temp = Mat::ones(100, 100, CV_8U)*255; 
M = temp-M; 

Но я думаю, что должно быть лучше/более легкие способы сделать это.

Любые предложения?

ответ

5

Вы не можете инициализировать выражение Mat из int или double. Решение состоит в том, чтобы использовать резюме :: Scalar, даже для отдельных матриц канала:

Mat M = Mat::ones(Size(100, 100), CV_8U); 
M = Scalar::all(255) - M; 

См http://docs.opencv.org/modules/core/doc/basic_structures.html#matrixexpressions для списка возможных выражений Матем.

+0

как это сделать в java –

0

Может быть, это особенность 2.1 или где-то между 2.1 и текущей версией ствол, но это работает для меня:

Mat cc = channels[k]; 
    double fmin,fmax; 
    cv::minMaxLoc(cc, &fmin, &fmax); 
    if(fmax > 1.0) 
     fmax = 255.0 ; 
else 
fmax = 1.0; 
cc = (cc/(fmax + 1e-9)); 

каналов поступает из:

channels = vector<Mat>(3); 
cv::split(img, channels); 

Так, конечно просто использовать скалярное выражение, по крайней мере в 2.1/текущей ветви SVN; что произойдет, если вы попробуете выше в 2.0?

Смежные вопросы