OpenCV如何将Mat作为指针来处理以加快代码的速度?

问题描述 投票:0回答:1

我正在尝试将指针与cv :: Mat一起使用,但我不太了解。

当我尝试这个时:

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    Mat src = imread("image.png");
    Mat img;
    Mat temp;

    img = Mat(src.rows, src.cols, CV_8UC1, cv::Scalar(0));
    temp = Mat(src.rows, src.cols, CV_8UC1, cv::Scalar(0));

    temp = img(Range(10, 20), Range(40, 60));
    temp.setTo(255);

    imshow("img", img);
    waitKey();
    return 0;
}

它有效,没有问题。但是,当我将其更改为:

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    Mat src = imread("image.png");
    Mat* img;
    Mat* temp;

    *img = Mat(src.rows, src.cols, CV_8UC1, cv::Scalar(0));
    *temp = Mat(src.rows, src.cols, CV_8UC1, cv::Scalar(0));

    temp = img(Range(10, 20), Range(40, 60));
    temp.setTo(255);

    imshow("img", *img);
    waitKey();
    return 0;
}

我收到此错误:

明显调用的括号前的表达式必须具有(指向)函数类型

at

temp = img(Range(10, 20), Range(40, 60));

和错误:

表达式必须具有类类型

at

temp.setTo(255);

Mat作为指针来加速代码的一般规则是什么?

例如,在函数参数中,我们将&用于输入Mats,将*用于输出Mats。但是,在函数内部是否有定义和使用Mats的一般规则?

由于我是初学者,因此请告诉我此代码是否还有其他问题。谢谢!

c++ opencv pointers mat
1个回答
2
投票

在您发布的示例中,使用指针没有任何好处。在带有指针的示例中,存在许多问题。

© www.soinside.com 2019 - 2024. All rights reserved.