cv::Mat 取值
时间: 2023-09-12 15:02:58 浏览: 86
cv::Mat 是 OpenCV 中表示图像的数据结构之一,可以用于图像的读取、处理和显示。要取得 cv::Mat 中的像素值,可以使用 at() 方法或者直接使用指针操作。
使用 at() 方法获取像素值的示例代码如下:
```cpp
cv::Mat image = cv::imread("image.jpg");
int row = 10; // 行索引
int col = 20; // 列索引
// 获取图像指定位置的像素值
cv::Vec3b pixel = image.at<cv::Vec3b>(row, col);
// 分别获取蓝色、绿色和红色通道的值
int blue = pixel
相关问题
报错 cv2.imwrite(r'./pgd_img/adver_results/{}.jpg'.format(i), np.transpose(adv_imgs), (1, 2, 0)) cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\imgcodecs\src\loadsave.cpp:738: error: (-2:Unspecified error) in function 'bool __cdecl cv::imwrite_(const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,const class std::vector<class cv::Mat,class std::allocator<class cv::Mat> > &,const class std::vector<int,class std::allocator<int> > &,bool)' > Encoding 'params' must be key-value pairs: > '(params.size() & 1) == 0' > where > 'params.size()' is 3
这个报错提示参数设置有误,具体来说是imwrite函数的第三个参数不符合要求。根据报错信息,看起来是传递的参数列表长度不符合要求,需要使用key-value pairs来设置参数。建议检查一下传递给imwrite函数的第三个参数是否正确,应该使用一个字典来设置参数,其中包含图像的编码方式、压缩质量等参数。例如可以这样设置:
```
cv2.imwrite(r'./pgd_img/adver_results/{}.jpg'.format(i), np.transpose(adv_imgs, (1, 2, 0)), params={"quality": 100})
```
其中,quality表示JPEG图像的压缩质量,取值范围是0-100,100表示无损压缩。经过上述修改后,应该就可以成功保存图像了。
cv::imread 参数
### 回答1:
cv::imread函数是OpenCV中用于读取图像的函数,它有以下参数:
1. filename:要读取的图像文件名或路径,可以是相对路径或绝对路径。
2. flags:读取图像时的标志位,可以是以下值的组合:
- cv::IMREAD_UNCHANGED:不改变图像的深度和通道数,读取后的图像深度和通道数与原图像相同。
- cv::IMREAD_GRAYSCALE:以灰度模式读取图像,读取后的图像只有一个通道。
- cv::IMREAD_COLOR:以彩色模式读取图像,读取后的图像有三个通道。
- cv::IMREAD_ANYDEPTH:表示读取图像的深度为16位或32位深度,而不是8位深度。
- cv::IMREAD_ANYCOLOR:表示读取图像的颜色通道数为任意值,而不是3个通道。
- cv::IMREAD_REDUCED_GRAYSCALE_2:以灰度模式读取图像,并将其尺寸缩小为原来的1/2。
- cv::IMREAD_REDUCED_GRAYSCALE_4:以灰度模式读取图像,并将其尺寸缩小为原来的1/4。
- cv::IMREAD_REDUCED_GRAYSCALE_8:以灰度模式读取图像,并将其尺寸缩小为原来的1/8。
- cv::IMREAD_REDUCED_COLOR_2:以彩色模式读取图像,并将其尺寸缩小为原来的1/2。
- cv::IMREAD_REDUCED_COLOR_4:以彩色模式读取图像,并将其尺寸缩小为原来的1/4。
- cv::IMREAD_REDUCED_COLOR_8:以彩色模式读取图像,并将其尺寸缩小为原来的1/8。
3. dst:可选参数,当使用cv::IMREAD_UNCHANGED标志位读取PNG图像时,需要传入一个Mat对象,用于接收读取的PNG图像。
返回值:返回读取的图像,如果读取失败则返回一个空的Mat对象。
### 回答2:
cv::imread是OpenCV库中的一个函数,用于读取图像文件。
cv::imread的参数有两个:
1. 文件路径:参数类型是字符串,用于指定要读取的图像文件的路径。路径可以是相对路径或绝对路径,相对路径是相对于当前工作目录的路径。
例如,如果图像文件位于与代码文件相同的目录中,可以只提供文件名作为参数,例如"image.jpg"。如果图像文件位于不同的目录中,必须提供包括目录路径的完整文件路径,例如"D:/images/image.jpg"。
2. 读取模式:参数类型是整数,用于指定图像的读取模式。有多种读取模式可供选择,常用的有:
- cv::IMREAD_COLOR:读取彩色图像。图像将转换为三通道BGR格式。
- cv::IMREAD_GRAYSCALE:读取灰度图像。图像将转换为单通道灰度格式。
- cv::IMREAD_UNCHANGED:读取原始图像,包括Alpha通道(如果有)。图像的通道数将保持不变。
函数的返回值是一个cv::Mat对象,即读取的图像。在遇到不能打开图像文件或文件路径无效的情况下,返回的图像将为空(cv::Mat::empty()返回true)。
示例代码:
```cpp
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat image = cv::imread("image.jpg", cv::IMREAD_COLOR);
if (image.empty())
{
std::cout << "Failed to open image file!" << std::endl;
return -1;
}
cv::imshow("Image", image);
cv::waitKey(0);
return 0;
}
```
这段代码将读取名为"image.jpg"的彩色图像,并将其显示在一个窗口中。如果无法打开图像文件,将打印错误消息并返回-1。
### 回答3:
cv::imread 是 OpenCV 库中用于读取图像文件的函数。它有两个主要的参数:
1. filename:要读取的图像文件的路径和名称。可以是相对路径或绝对路径。可以是各种图像格式的文件,如JPEG、PNG、BMP等。
2. flags:用于确定读取图像的方式。它有以下几个选项:
- cv::IMREAD_COLOR:默认值,读取彩色图像。如果图像文件是彩色图像,将保留所有通道的像素值。
- cv::IMREAD_GRAYSCALE:以灰度图像的方式读取图像。将会将图像转换为单通道图像,像素的取值范围是0到255。
- cv::IMREAD_UNCHANGED:以包括 alpha 通道在内的方式读取图像。如果图像文件中包含 alpha 通道,保留所有通道的像素值。如果没有 alpha 通道,则结果与 cv::IMREAD_COLOR 相同。
函数返回一个 cv::Mat 对象,即读取的图像数据。如果读取失败,返回的 cv::Mat 对象为空。可以通过调用 cv::Mat 的成员函数来获取图像的相关信息,如宽度、高度、通道数等。
示例代码如下:
```cpp
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat image = cv::imread("example.jpg", cv::IMREAD_COLOR);
if (image.empty())
{
std::cout << "Failed to read image" << std::endl;
return -1;
}
int width = image.cols;
int height = image.rows;
int channels = image.channels();
std::cout << "Image width: " << width << std::endl;
std::cout << "Image height: " << height << std::endl;
std::cout << "Number of channels: " << channels << std::endl;
cv::imshow("Image", image);
cv::waitKey(0);
return 0;
}
```
以上代码中,通过 cv::imshow 函数显示读取的图像,并通过 cv::waitKey 暂停程序的执行,直到用户按下任意键。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044947.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.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://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)