我正在使用C++和OpenCV。現在我想定義一個Mat
類型(例如CV_32FC3
),以供我的代碼中的許多Mats使用。OpenCV#定義墊的類型
爲了實現這一點,我想:
#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);
}
然而,這會導致錯誤
預期 ')'
預期表達
然後我試圖,
#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);
}
哪些工作,但在我看來是醜陋的。
我真的不明白爲什麼或如何工作,以及爲什麼第一個代碼段會導致錯誤。我不是C++專家,所以任何幫助表示讚賞。
太棒了!這解決了它。你能解釋爲什麼'constexpr auto'會比使用'#define'更好嗎? –
另外,你知道爲什麼它使用'int test = FLOW_TYPE;'作爲局部變量嗎? –
@WouterFlorijn因爲它用雙分號擴展爲'int test = CV_32FC3 ;;',但這不是錯誤。 'cv :: Mat flow = cv :: Mat(frame1.rows,frame1.cols,CV_32FC3;);'是相反的錯誤(注意'CV_32FC3'後面的分號) – Miki