2016-08-20 1 views
-3

Ich habe ein C-Api opencv Projekt und ich möchte in c ändern ++ (mat) sieht diesen ursprünglichen Code:Fehler: Basis Operand '->' hat nicht-Pointer-Typen 'cv :: Mat'

current_cost = 0; 
basePtr = (unsigned char*)tmp1->imageData; 
for(int j=0; j<tmp1->height; basePtr += tmp1->widthStep, j++) 
{ 
    iterator = basePtr; 
    for(int i=0; i<tmp1->width; iterator++, i++) 
     if(*iterator == 255) 
      current_cost++; 
} 

basePtr = (unsigned char*)tmp2->imageData; 
for(int j=0; j < tmp2->height; basePtr += tmp2->widthStep, j++) 
{ 
    iterator = basePtr; 
    for(int i=0; i<tmp2->width; iterator++, i++) 
     if(*iterator == 0) 
      current_cost++; 
} 
if(current_cost < cost)     
    return true; 
else return false; 

nach diesem Projekt finden Sie unter diesem Fehler

main.cpp:63:35: error: base operand of ‘->’ has non-pointer type ‘cv::Mat’ 
basePtr = (unsigned char*)tmp1->imageData; 

Fehler sehen für jede Zeile verwendet ‚->‘. bitte helfen Sie mir ...

+3

Der Fehler Sie sagt, dass die tmp1 (und so weiter) ist kein POINTER, sondern hat den Typ cv :: Mat. Also, in diesem Fall nehme ich an, dass die korrekte Form, um damit umzugehen, wie tmp1.imageData (und so weiter) ist. Aber das ist eine Vermutung, da Sie nicht genug von Ihrem Code zeigen. – Jauch

+0

versuchen Sie es mit 'tmp1.imageData' – SimpleGuy

Antwort

0

Sie sollten nicht nur jede Codezeile konvertieren, aber verwenden Sie die C++ API intelligent. Ihre Funktion neu geschrieben werden könnte einfach als:

bool foo(const Mat& tmp1, const Mat& tmp2, int cost) { 
    int count = countNonZero(tmp1 == 255); 
    count += countNonZero(tmp2 == 0); 
    return count < cost; 
}