У меня есть класс с именем «myClass», который возвращает тип «cv :: Scalar», и я хочу сделать это:
cv::Scalar myValue;
for ( myValue > myClass (i,j) )
....
Но часть сравнения в строке «for» выдает ошибку, говоря «ни один оператор> не соответствует этим операндам». Может ли кто-нибудь помочь мне? Спасибо.
Если нет оператора для сравнения двух 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
просто в качестве примера, но вы можете определить оператор в любом месте, если хотите, чтобы было видно, где выполняется сравнение.
Чтобы завершить ответ Чжи Лу:
Если вы хотите сравнить элемент 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++){}
Скаляр — это массив элементов с четырьмя двойными типами. Вы можете хранить любое количество элементов (двойного типа) в такой структуре. Таким образом, вы не можете сравнивать один экземпляр Scalar с другим, например, с типом int.