Ich benutze C++ und OpenCV. Jetzt möchte ich einen bestimmten Mat
Typ definieren (wie CV_32FC3
), der von vielen Mats in meinem Code verwendet werden soll.OpenCV #define type für Mat
Um dies zu erreichen, habe ich versucht:
#define FLOW_TYPE CV_32FC3;
cv::Mat BaoOpticalFlow::initialize(cv::Mat & frame1, cv::Mat & frame2)
{
cv::Mat flow = cv::Mat(frame1.rows, frame1.cols, FLOW_TYPE);
}
Doch diese Fehler verursacht
erwartet a ')'
einen folgenden Ausdruck erwartet
Dann habe ich versucht, ,
#define FLOW_TYPE CV_32FC3;
cv::Mat BaoOpticalFlow::initialize(cv::Mat & frame1, cv::Mat & frame2)
{
int test = FLOW_TYPE;
cv::Mat flow = cv::Mat(frame1.rows, frame1.cols, test);
}
Was funktioniert, ist aber meiner Meinung nach hässlich.
Ich verstehe nicht wirklich warum oder wie das funktioniert, und warum der erste Ausschnitt Fehler verursacht. Ich bin kein C++ - Experte, daher wird jede Hilfe geschätzt.
Großartig! Das behebt es. Können Sie erklären, warum "constexpr auto" besser wäre als "# define"? –
Weißt du auch, warum es funktioniert mit 'int test = FLOW_TYPE;' als lokale Variable? –
@WouterFlorijn Weil es zu 'int test = CV_32FC3 ;;' mit doppeltem Semikolon expandiert, aber das ist kein Fehler. 'cv :: Matfluss = cv :: Mat (frame1.rows, frame1.cols, CV_32FC3;);' ist stattdessen ein Fehler (beachte das Semikolon nach 'CV_32FC3') – Miki