Я пытаюсь использовать указатель с 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;
}
, я получаю эту ошибку:
выражение, предшествующее круглым скобкам видимого вызова, должно иметь (указатель на) тип функции
в
temp = img(Range(10, 20), Range(40, 60));
и ошибка:
выражение должно иметь тип класса
в
temp.setTo(255);
Каково общее правило при работе с Mat s в качестве указателей для ускорения кода?
Я знаю, например, что в аргументах функции мы используем &
для ввода Mats и*
для выходных матов. Но есть ли общее правило, как определять и использовать Маты внутри функций?
Скажите, пожалуйста, есть ли другие проблемы с этим кодом, так как я новичок. Спасибо!