cv::Mat.size[1]
时间: 2023-11-27 22:04:15 浏览: 141
`cv::Mat.size` 是一个数组,用于存储 `cv::Mat` 对象的维度信息。如果 `cv::Mat` 是一个二维矩阵,那么 `size` 数组的第一个元素是行数,第二个元素是列数。因此,`cv::Mat.size[1]` 表示 `cv::Mat` 的第二维大小,即列数。
例如,如果我们有一个 `cv::Mat` 对象 `img`,我们可以使用 `size` 数组来获取它的行数和列数,如下所示:
```cpp
cv::Mat img = cv::imread("image.jpg");
int rows = img.size[0];
int cols = img.size[1];
```
这里,`size[0]` 表示 `cv::Mat` 的第一维大小,即行数,而 `size[1]` 表示第二维大小,即列数。因此,`cols` 变量将保存 `img` 的列数。
相关问题
改完以后还是报错 main.cpp:(.text+0x1fff):对‘cv::Mat::Mat(cv::Size_<int>, int)’未定义的引用 main.cpp:(.text+0x201d):对‘cv::Mat::zeros(int, int, int)’未定义的引用 main.cpp:(.text+0x2063):对‘cv::Mat::Mat(int, int, int)’未定义的引用 main.cpp:(.text+0x2177):对‘cv::Mat::Mat()’未定义的引用
这些错误一般是因为编译器无法找到OpenCV库文件的原因造成的。请确认您是否已经正确地将OpenCV库文件链接到您的项目中。
如果您使用的是CMake来构建您的项目,请确保在CMakeLists.txt中正确地设置了OpenCV库的路径。
如果您是手动编译的,请确保您已经正确地将OpenCV库文件添加到编译命令中。
如果您仍然无法解决这些问题,请提供更多的信息,例如您使用的操作系统和编译器,以及您如何安装和链接OpenCV库。
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中,并指定所需的填充类型。
希望这可以解决您的问题!如果还有其他疑问,请随时提问。
阅读全文