Как сравнить скаляры в OpenCV

У меня есть класс с именем «myClass», который возвращает тип «cv :: Scalar», и я хочу сделать это:

cv::Scalar myValue;
for ( myValue > myClass (i,j) )
....

Но часть сравнения в строке «for» выдает ошибку, говоря «ни один оператор> не соответствует этим операндам». Может ли кто-нибудь помочь мне? Спасибо.

3

Решение

Если нет оператора для сравнения двух cv::Scalar элементы, которые вы можете определить это:

#include "OpenCVStuff.h"
// Custom operator to compare cv::Scalar class...
bool operator >(const cv::Scalar &a, const cv::Scalar &b)
{
bool Result = false;
// Do whatever you think a Scalar comparison must be.
return Result;
}

int main(int argc, char **argv)
{
cv::Scalar myValue;

// Assuming myClass (i,j) returns a cv::Scalar
for ( myValue > myClass (i,j) )
{
// Do something...
}

return 0;
}

Делая это, вы можете определить путь два cv::Scalar сравниваются, не беспокоясь cv::Scalar сам класс.

Я положил это в main.cpp просто в качестве примера, но вы можете определить оператор в любом месте, если хотите, чтобы было видно, где выполняется сравнение.

2

Другие решения

Чтобы завершить ответ Чжи Лу:

Если вы хотите сравнить элемент Scalar, вы должны сделать следующее:

cv::Scalar scalar(myValue);   //here you assign a value to the element (0,0)
for (scalar.val[0,0] > myClass (i,j)) // access the elment of Scalar
{
}

В любом случае, нет смысла использовать Scalar, если вам нужно только одно значение. А также обратите внимание, что вам нужно правильное выражение для цикла, как

for(i = 0; i < 0; i++){}
6

Скаляр — это массив элементов с четырьмя двойными типами. Вы можете хранить любое количество элементов (двойного типа) в такой структуре. Таким образом, вы не можете сравнивать один экземпляр Scalar с другим, например, с типом int.

5
По вопросам рекламы [email protected]