c++ - 将多行附加到 openCV 矩阵

标签 c++ opencv

<分区>

谁能告诉我如何在现有 cv::Mat 的末尾附加几行(作为 cv::Mat)?因为它有很多数据,所以我不想用 for 循环遍历行并逐行添加它们。所以这就是我想要做的:

cv::Mat existing; //This is a Matrix, say of size 700x16
cv::Mat appendNew; //This is the new Matrix with additional data, say of size 200x16.
existing.push_back(appendNew);

如果我尝试推回较小的矩阵,我会收到大小不匹配的错误:

OpenCV Error: Sizes of input arguments do not match 
(Pushed vector length is not equal to matrix row length)

所以我猜 .push_back() 试图像一种新 channel 一样附加整个矩阵,这不会起作用,因为它比现有矩阵小得多。有人知道是否可以在现有矩阵的末尾追加行作为一个整体,而不是使用 for 循环遍历它们?

这对我来说似乎是一个简单的问题,但是我无法在网上找到简单的解决方案...所以在此先感谢! 干杯:)

最佳答案

您可以使用 cv::hconcat()在给定矩阵的顶部或底部追加行:

import cv2
import numpy as np

box = np.ones((50, 50, 3), dtype=np.uint8)
box[:] = np.array([0, 0, 255])

sample_row = np.ones((1, 50, 3), dtype=np.uint8)
sample_row[:] = np.array([255, 0, 0])

for i in xrange(5):
    box = cv2.vconcat([box, sample_row])

enter image description here ===> enter image description here

出于可视化目的,我创建了一个红色的 RGB 矩阵并尝试将蓝色行附加到底部,您可以替换为原始数据,只需确保要连接的两个矩阵具有相同的列数和相同的数据类型。我在创建矩阵时明确定义了 dtype

关于c++ - 将多行附加到 openCV 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46968120/

相关文章:

c++ - C++ 源文件中的不可打印 (0xFF) 字节

c++ - 防范函数名隐藏类名的危险

c++ - 使用 qprocess 运行 .exe

opencv - getTickCount 时间单位混淆

opencv - 反转实值索引网格

opencv - 计算平行平面的单应性

opencv - 为什么模型的 opengl 投影没有给出与 opencv 投影完全相同的结果?

c++ - 在构造不同的元素时, 'std::allocator<T>::construct' 是线程安全的吗?

c++ - 在性能关键型软件 (Qt) 中使用定时器

python - python中的图像处理循环/属性错误 'NoneType'