OpenCV умножить скаляр и матрицу - PullRequest
1 голос
/ 23 мая 2010

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

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

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

В настоящее время я делаю это, создавая временную матрицу с тем же скалярным значением и выполняя требуемую арифметическую операцию.Пример ниже .. </p> <pre>Mat M(Size(100,100), CV_8U); Mat temp = Mat::ones(100, 100, CV_8U)*255; M = temp-M;

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

Есть предложения?

Ответы [ 2 ]

5 голосов
/ 14 июня 2010

Вы не можете инициализировать выражение Mat из int или double. Решение состоит в том, чтобы использовать cv :: 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 для списка возможных выражений Mat.

0 голосов
/ 21 ноября 2010

Может быть, это функция 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...