运算符->应用于“cv::Mat”而不是指针类型
时间: 2024-01-08 18:04:47 浏览: 71
这个错误通常是因为运算符->被错误地应用于cv::Mat对象,而不是指向对象的指针类型。
在C++中,运算符->通常用于指向对象的指针类型,而cv::Mat是一个类对象,不是指针类型。因此,当你想要访问cv::Mat对象的成员变量或成员函数时,应该使用点运算符(.)而不是箭头运算符(->)。
例如,当你想要访问cv::Mat对象的rows成员变量时,应该使用以下方式:
```cpp
cv::Mat img;
int rows = img.rows;
```
而不是以下方式:
```cpp
cv::Mat* img = new cv::Mat;
int rows = img->rows; // 错误的做法!
```
如果你确实需要使用指针类型访问cv::Mat对象,可以使用指针类型的智能指针(std::shared_ptr或std::unique_ptr)。
例如,使用std::shared_ptr访问cv::Mat对象的rows成员变量的方式如下:
```cpp
std::shared_ptr<cv::Mat> img = std::make_shared<cv::Mat>();
int rows = img->rows;
```
总之,避免在cv::Mat对象上使用箭头运算符(->)。
相关问题
运算符 -> 或 ->* 应用于 "MySharedPtr<TestClass>" 而不是指针类型
运算符 -> 或 ->* 只能应用于指针类型,而 MySharedPtr<TestClass> 不是指针类型。MySharedPtr 是一个智能指针,它封装了指向 TestClass 对象的指针,并提供了自动内存管理功能。如果想要访问 TestClass 对象的成员变量或成员函数,应该使用智能指针提供的成员访问操作符 -> 或 *,而不是运算符 -> 或 ->*。例如:
```
MySharedPtr<TestClass> ptr(new TestClass);
ptr->memberFunction(); // 访问 TestClass 对象的成员函数
(*ptr).memberVariable = 10; // 访问 TestClass 对象的成员变量
```
void Widget::readFarme() { (*cam)>>(*frame);//读取当前帧信息 cv::cvtColor(frame,frame,cv::COLOR_BGR2RGB);//转化为Qt的RGB格式 QByteArray imageData((const char)frame->data, frame->cols * frame->rows * frame->elemSize()); imag->loadFromData(imageData, frame->cols, frame->rows, QImage::Format_RGB888); //ui->captrue_lab->setPixmap(QPixmap::fromImage(*imag));//将图片显示到label上 }根据QTopencv实现
这段代码是一个Qt界面程序中,使用OpenCV库读取摄像头实时采集的图像,并将其转化为Qt中支持的RGB格式,最后将图像显示在界面上的过程。
具体来说,它的实现原理如下:
1. 通过调用摄像头对象`cam`的重载运算符`>>`,将当前帧信息读取到指针`frame`所指向的OpenCV Mat对象中。
2. 使用OpenCV库提供的`cv::cvtColor`函数,将采集到的BGR格式图像转化为Qt中支持的RGB格式。转化后的图像保存在原先的`frame`对象中。
3. 将转化后的图像数据打包成一个QByteArray对象`imageData`,该对象的数据成员是指向原始数据缓冲区的指针,大小为采集图像的宽乘以高再乘以每个像素占用的字节数(`elemSize()`)。
4. 调用`QImage`类的静态函数`loadFromData`,将`imageData`中的数据加载到一个QImage对象`imag`中。其中,第四个参数`QImage::Format_RGB888`指定了该QImage对象中每个像素占用3个字节,对应RGB三个分量。
5. 最后,将`imag`对象显示在界面上的某个QLabel控件上,以供用户观看。
需要注意的是,在实际使用中,需要将该函数与定时器或者线程等机制结合起来,以实现连续的图像采集和显示。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)