如何从彩色矩形构建 cv::Mat
How to build cv::Mat from coloured rectangles
我的目标是使用 OpenCV 创建产量图。这些产量图需要用彩色矩形来表示产量。由矩形 here.
构建的 Mat 示例
那么可以用彩色矩形创建 cv::Mat 吗?矩形的数量不是恒定的,因此每次使用都会发生变化。
为了明确问题:如果我有 4 个盒子(2x2 网格),我想自动制作一个与 4 个盒子一样大的垫子。如果我有 16 个盒子(4x4 网格),我想制作一个与 16 个盒子一样大的垫子。
我找不到让它工作的方法,所以我希望这里有人知道是否可行。
如果有人能帮助我就太好了,如果不能的话也欢迎替代!谢谢
一些信息:
- OpenCV version:4.5.3
- OS: Ubuntu 20.04
- 语言:C++
您可以使用 OpenCV 函数创建矩形。
Basic Geometric Drawing OpenCV
int x = 0;
int y = 0;
int width = 10;
int height = 20;
// our rectangle...
cv::Rect rect(x, y, width, height);
// and its top left corner...
cv::Point pt1(x, y);
// and its bottom right corner.
cv::Point pt2(x + width, y + height);
// These two calls...
cv::rectangle(img, pt1, pt2, cv::Scalar(0, 255, 0));
// essentially do the same thing
cv::rectangle(img, rect, cv::Scalar(0, 255, 0))
ref
OpenCV 有 cv::hconcat
和 cv::vconcat
。像 numpy 的 hstack/vstack.
一样使用它们
确保您的部件具有相同的类型(和通道数)。
The documentation 有代码示例。
cv::Mat matArray[] = { cv::Mat(4, 1, CV_8UC1, cv::Scalar(1)),
cv::Mat(4, 1, CV_8UC1, cv::Scalar(2)),
cv::Mat(4, 1, CV_8UC1, cv::Scalar(3)),};
cv::Mat out;
cv::hconcat( matArray, 3, out );
//out:
//[1, 2, 3;
// 1, 2, 3;
// 1, 2, 3;
// 1, 2, 3]
我的目标是使用 OpenCV 创建产量图。这些产量图需要用彩色矩形来表示产量。由矩形 here.
构建的 Mat 示例那么可以用彩色矩形创建 cv::Mat 吗?矩形的数量不是恒定的,因此每次使用都会发生变化。
为了明确问题:如果我有 4 个盒子(2x2 网格),我想自动制作一个与 4 个盒子一样大的垫子。如果我有 16 个盒子(4x4 网格),我想制作一个与 16 个盒子一样大的垫子。
我找不到让它工作的方法,所以我希望这里有人知道是否可行。
如果有人能帮助我就太好了,如果不能的话也欢迎替代!谢谢
一些信息:
- OpenCV version:4.5.3
- OS: Ubuntu 20.04
- 语言:C++
您可以使用 OpenCV 函数创建矩形。
Basic Geometric Drawing OpenCV
int x = 0;
int y = 0;
int width = 10;
int height = 20;
// our rectangle...
cv::Rect rect(x, y, width, height);
// and its top left corner...
cv::Point pt1(x, y);
// and its bottom right corner.
cv::Point pt2(x + width, y + height);
// These two calls...
cv::rectangle(img, pt1, pt2, cv::Scalar(0, 255, 0));
// essentially do the same thing
cv::rectangle(img, rect, cv::Scalar(0, 255, 0))
ref
OpenCV 有 cv::hconcat
和 cv::vconcat
。像 numpy 的 hstack/vstack.
确保您的部件具有相同的类型(和通道数)。
The documentation 有代码示例。
cv::Mat matArray[] = { cv::Mat(4, 1, CV_8UC1, cv::Scalar(1)),
cv::Mat(4, 1, CV_8UC1, cv::Scalar(2)),
cv::Mat(4, 1, CV_8UC1, cv::Scalar(3)),};
cv::Mat out;
cv::hconcat( matArray, 3, out );
//out:
//[1, 2, 3;
// 1, 2, 3;
// 1, 2, 3;
// 1, 2, 3]