C++ OpenCV如何处理Mat作为指针加速的代码?
我试图将指针与cv::Mat一起使用,但我不太理解它 当我尝试这个:C++ OpenCV如何处理Mat作为指针加速的代码?,c++,opencv,pointers,mat,C++,Opencv,Pointers,Mat,我试图将指针与cv::Mat一起使用,但我不太理解它 当我尝试这个: #包括 #包括 使用名称空间cv; 使用名称空间std; int main() { Mat src=imread(“image.png”); Mat-img; 垫温; img=Mat(src.rows,src.cols,CV_8UC1,CV::Scalar(0)); temp=Mat(src.rows,src.cols,CV_8UC1,CV::Scalar(0)); 温度=img(范围(10,20),范围(40,60)); 温
#包括
#包括
使用名称空间cv;
使用名称空间std;
int main()
{
Mat src=imread(“image.png”);
Mat-img;
垫温;
img=Mat(src.rows,src.cols,CV_8UC1,CV::Scalar(0));
temp=Mat(src.rows,src.cols,CV_8UC1,CV::Scalar(0));
温度=img(范围(10,20),范围(40,60));
温度设置为(255);
imshow(“img”,img);
waitKey();
返回0;
}
它工作正常,没有问题。但是,当我将其更改为:
#包括
#包括
使用名称空间cv;
使用名称空间std;
int main()
{
Mat src=imread(“image.png”);
Mat*img;
材料*温度;
*img=Mat(src.rows,src.cols,CV_8UC1,CV::Scalar(0));
*temp=Mat(src.rows,src.cols,CV_8UC1,CV::Scalar(0));
温度=img(范围(10,20),范围(40,60));
温度设置为(255);
imshow(“img”)、*img;
waitKey();
返回0;
}
我得到这个错误:
表观调用括号前面的表达式必须具有
(指向-)函数类型的指针
在
temp=img(范围(10,20),范围(40,60));
错误是:
表达式必须具有类类型
在
温度设置为(255);
处理Mats作为加速代码指针的一般规则是什么
例如,我知道,在函数参数中,我们使用&
作为输入垫,使用*
作为输出垫。但是,在函数中如何定义和使用Mats有一个通用规则吗
请告诉我这个代码是否还有其他错误,因为我是初学者。谢谢大家! 在您发布的示例中,使用指针没有任何好处。在指针示例中,存在许多问题
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat src = imread("image.png");
Mat* img; // Uninitialized pointer; points to random memory
Mat* temp; // Uninitialized pointer; points to random memory
// Undefined behavior: dereferencing an uninitialized pointer
// You are basically trying to treat some random piece of memory
// as a cv::Mat and trying to assign another cv::Mat to it.
*img = Mat(src.rows, src.cols, CV_8UC1, cv::Scalar(0));
*temp = Mat(src.rows, src.cols, CV_8UC1, cv::Scalar(0));
// Syntax error: img has type Mat*; you could call the
// Mat Mat::operator()( Range _rowRange, Range _colRange ) const
// Like this:
// *temp = img->operator()(Range(10, 20), Range(40, 60));
// or like this:
// *temp = (*img)(Range(10, 20), Range(40, 60));
// that would work if img and temp were to point to valid cv::Mats
temp = img(Range(10, 20), Range(40, 60));
// Syntax error temp has type Mat*
// to access a pointers members use -> instead of .
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; // Uninitialized pointer; points to random memory
Mat* temp; // Uninitialized pointer; points to random memory
// Undefined behavior: dereferencing an uninitialized pointer
// You are basically trying to treat some random piece of memory
// as a cv::Mat and trying to assign another cv::Mat to it.
*img = Mat(src.rows, src.cols, CV_8UC1, cv::Scalar(0));
*temp = Mat(src.rows, src.cols, CV_8UC1, cv::Scalar(0));
// Syntax error: img has type Mat*; you could call the
// Mat Mat::operator()( Range _rowRange, Range _colRange ) const
// Like this:
// *temp = img->operator()(Range(10, 20), Range(40, 60));
// or like this:
// *temp = (*img)(Range(10, 20), Range(40, 60));
// that would work if img and temp were to point to valid cv::Mats
temp = img(Range(10, 20), Range(40, 60));
// Syntax error temp has type Mat*
// to access a pointers members use -> instead of .
temp.setTo(255);
imshow("img", *img);
waitKey();
return 0;
}
另外,您应该避免使用指向cv::Mat的指针,因为它本身已经是一个refcounted智能指针。解释了一些事情。但是我不知道错误是从哪里来的。好吧,您应该避免使用指向cv::Mat的指针,因为它本身已经是一个refcounted智能指针。解释了一些事情。但是我不知道这个错误是从哪里来的。谢谢你的回答。最后一点,你是说,如果