添加变量以引用函数

时间:2017-06-12 20:37:28

标签: c++ visual-studio

这是我在visual studio c ++中的代码,

//draw a line onto the frame


        line(imgFrame2Copy, Point(0, imgFrame2Copy.rows / 2), Point(imgFrame2Copy.cols, imgFrame2Copy.rows / 2), Scalar(0), 3);
        //display the result

        line(imgFrame2Copy, Point(0, imgFrame2Copy.rows / 8), Point(imgFrame2Copy.cols, imgFrame2Copy.rows / 8), Scalar(0), 3);

        //wait some time for the frame to render
        waitKey(30);

        drawCarCountOnImage(carCount, imgFrame2Copy);


        cv::imshow("imgFrame2Copy", imgFrame2Copy);



        //cv::waitKey(0);                 // uncomment this line to go frame by frame for debugging

        // now we prepare for the next iteration

我想添加一个变量来引用功能line(imgFrame2Copy, Point(0, imgFrame2Copy.rows / 2), Point(imgFrame2Copy.cols, imgFrame2Copy.rows / 2), Scalar(0), 3);    你能帮助我吗 cordialy。

1 个答案:

答案 0 :(得分:1)

如果您可以访问现代C ++(C ++ 11或更高版本),则可以使用lambda(如R Sahu所述):

auto drawMyLine = [imgFrame2Copy](int denominator) {
    line(imgFrame2Copy,
         Point(0, imgFrame2Copy.rows / denominator),
         Point(imgFrame2Copy.cols, imgFrame2Copy.rows / denominator),
         Scalar(0),
         3);
  };

drawMyLine(2);

请注意,通过按值捕获我假设的OpenCV矩阵cv::Mat,您可以复制引用计数对象,以便lambda 可以一生的持续时间。也就是说,如果你创建了太多这些,你可能会耗尽内存; - )

否则,您可以使用C ++ 98风格的仿函数:

struct DrawMyLine {
  void operator()(cv::Mat& imgFrame2Copy, int denominator) {
    line(imgFrame2Copy,
         Point(0, imgFrame2Copy.rows / denominator),
         Point(imgFrame2Copy.cols, imgFrame2Copy.rows / denominator),
         Scalar(0),
         3);
  }
};

DrawMyLine drawLine;
drawLine(imgFrame2Copy, 2);