假设我有一个尺寸为 98x158x32(浮点型)的 Mat 变量 small_image。现在我想对这个图像进行零填充(即向图像添加零边框)。我想在图像上方和下方添加 7 个零,并在图像的左侧和右侧添加 12 个零。第一个想法是使用 cv copyMakeBorder (请参阅copyMakeBorder doc),这似乎非常适合:
int old_size[3];
old_size[0] = 98;
old_size[1] = 158;
old_size[2] = 32;
int pad_size[3];
pad_size[0] = old_size[0] + 2 * 7;
pad_size[1] = old_size[1] + 2 * 12;
pad_size[2] = old_size[2];
cv::Mat image_padded(3, pad_size, CV_32FC1, cv::Scalar(0)); //Initialize the larger Mat to 0
copyMakeBorder(small_image,image_padded,7,7,12,12,BORDER_CONSTANT,Scalar(0));
Run Code Online (Sandbox Code Playgroud)
但是,此代码给出了 memcopy 错误。有没有人看到这里的问题?
这篇文章中描述的替代方法也不起作用:
cv::Rect roi( cv::Point( 12, 7 ), small_image.size() );
small_image.copyTo( image_padded( roi ) );
Run Code Online (Sandbox Code Playgroud)
它声称“断言失败(m.dims <= 2)”,而两个 Mat …
假设我有一个包含6组的结构bbox,其中每组包含4个向量.我可以使用bbox.set1.vect1.push_back(foo)添加一个vector元素.但是,我正在从文件中读取数据,而我正在寻找一种将数据存储在向量中的优雅方法.使用带有索引i(1到6)和k(1到4)的double for()循环我尝试了以下(使用字符串连接):
string test1 = "bbox.set";
string test2 = ".vect";
string fin = test1 + to_string(i) + test2 + to_string(k);
fin.push_back(val);
Run Code Online (Sandbox Code Playgroud)
虽然代码编译得很好,但似乎没有任何事情发生.明确地写bbox.set1.vect1.push_back(foo)确实有效.这可以这样做吗?在另一个主题中,我读过C不支持在运行时更改/创建变量名,但在这里我只是尝试访问现有变量.