如何确认cv::mat 格式
时间: 2023-10-01 08:11:56 浏览: 57
要确认cv::mat格式,可以使用以下代码:
```c++
cv::Mat image;
int channels = image.channels(); // 通道数
int depth = image.depth(); // 像素深度
int rows = image.rows; // 行数
int cols = image.cols; // 列数
int type = image.type(); // 图像类型
std::cout << "channels: " << channels << std::endl;
std::cout << "depth: " << depth << std::endl;
std::cout << "rows: " << rows << std::endl;
std::cout << "cols: " << cols << std::endl;
std::cout << "type: " << type << std::endl;
```
输出结果将显示图像的通道数、像素深度、行数、列数和图像类型。根据输出结果,可以确认cv::mat格式。例如:
```
channels: 3
depth: 0
rows: 480
cols: 640
type: 16
```
这个输出结果表示图像是一个3通道、像素深度为8位无符号整数、大小为640x480的BGR图像。
相关问题
int m_nHeight = 4352, m_nWidth = 4352, m_nCutCols = 25, m_nCutRows = 25; uchar *m_pDefectMap = new uchar[m_nHeight * m_nWidth]; memset(m_pDefectMap, m_nHeight * m_nWidth * sizeof(uchar)); cv::Mat labels, centroids, stats; cv::Mat matDefectMap = cv::Mat(m_nHeight, m_nWidth, CV_8UC1, m_pDefectMap); cv::Mat roi = matDefectMap(cv::Rect(m_nCutCols, m_nCutRows, m_nWidth - 2 * m_nCutCols, m_nHeight - 2 * m_nCutRows)); cv::Mat dst = cv::Mat(cv::Size(roi.cols + 2, roi.rows + 2), CV_8UC1, cv::Scalar(0)); cv::copyMakeBorder(roi, dst, 1, 1, 1, 1, cv::BORDER_REFLECT_101);填充类型无效
根据您提供的代码,我注意到您在使用cv::copyMakeBorder函数时设置了填充类型为cv::BORDER_REFLECT_101,但您认为填充类型无效。
可能的原因是,您传递给cv::copyMakeBorder函数的输入图像roi的数据类型是CV_8UC1,即单通道8位无符号整数图像。然而,根据您的代码,您创建的输出图像dst的数据类型也是CV_8UC1。这意味着您尝试将单通道图像roi复制到单通道图像dst中,因此无论您设置任何填充类型,结果都将是相同的。
要解决这个问题,您可以尝试创建一个多通道图像作为输出图像dst,以便能够正确应用填充类型。例如,您可以使用以下代码创建一个三通道图像:
```cpp
cv::Mat dst = cv::Mat(cv::Size(roi.cols + 2, roi.rows + 2), CV_8UC3, cv::Scalar(0));
```
然后,您可以使用cv::copyMakeBorder函数将单通道图像roi复制到三通道图像dst中,并指定所需的填充类型。
希望这可以解决您的问题!如果还有其他疑问,请随时提问。
cv::Mat src = cv::imread("image.jpg");cv::Mat dst;cv::rotate(src, dst, cv::ROTATE_90_COUNTERCLOCKWISE);用opencvsharp改写
下面是将上述代码用OpenCvSharp改写的示例:
```
using OpenCvSharp;
Mat src = Cv2.ImRead("image.jpg");
Mat dst = new Mat();
Cv2.Rotate(src, dst, RotateFlags.Rotate90CounterClockwise);
```
在这个示例中,我们首先使用Cv2.ImRead函数加载了一张图像,并将其存储在src中。然后,我们创建了一个空的Mat对象dst,用于存储旋转后的图像。最后,我们使用Cv2.Rotate函数将src逆时针旋转90度,并将结果存储在dst中。RotateFlags枚举类型用于指定旋转的方向,可以使用RotateFlags.Rotate90Clockwise进行顺时针旋转90度,或使用RotateFlags.Rotate180进行180度旋转等。
阅读全文