从图像阵列创建单个图像
Create a single image from images array
嗨,我正试图从opencv中的多个图像中创建一个图像。我使用的图像大小相同。
我所做的是将它们重塑为一行,然后尝试将它们与我的新图像合并在一起。
我创建了大小为2个图像的新图像并通过阵列,但我收到错误EXC_BAD_ACCESS(代码=1,地址=..)
注意:图像大小正确单个图像的大小:[170569 x 1]new_image的大小:[170569 x 2]
我的代码在下面。谢谢
int main(){
Mat image[2];
image[0]= imread("image1.jpg",0);
image[1]= imread("image2.jpg",0);
image[0] = image[0].reshape(0, 1); //SINGLE LINE
image[1] = image[1].reshape(0, 1); //SINGLE LINE
int size = sizeof(image)/sizeof(Mat);
Mat new_image(image[0].cols,size,CV_32FC1,image);
}
Mat new_image;
vconcat(图像[0],图像[1],new_image);
如果我理解得很好,就需要将两个相同大小的图像连接到一个Mat中。我写了一个非常快速的代码来执行这项任务。
U可以将函数的参数更改为指针,并添加其他处理程序来处理可变大小的图像。
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
cv::Mat cvConcatenateMat(const cv::Mat &image1, const cv::Mat &image2, bool isCol CV_DEFAULT(true)){
if (isCol) {
cv::Mat mergeMat = cv::Mat(image1.rows, image1.cols + image2.cols, image1.type());
for (int j = 0; j < image1.rows; j++) {
for (int i = 0; i < image1.cols; i++) {
mergeMat.at<cv::Vec3b>(j,i) = image1.at<cv::Vec3b>(j,i);
}
for (int i = image1.cols; i < mergeMat.cols; i++) {
mergeMat.at<cv::Vec3b>(j,i) = image2.at<cv::Vec3b>(j,i);
}
}
return mergeMat;
} else {
cv::Mat mergeMat = cv::Mat(image1.rows + image2.rows, image1.cols, image1.type());
for (int j = 0; j < image1.cols; j++) {
for (int i = 0; i < image1.rows; i++) {
mergeMat.at<cv::Vec3b>(i,j) = image1.at<cv::Vec3b>(i,j);
}
for (int i = image1.rows; i < mergeMat.rows; i++) {
mergeMat.at<cv::Vec3b>(i,j) = image2.at<cv::Vec3b>(i-image1.rows,j);
}
}
return mergeMat;
}
}
int main(int argc, const char * argv[]) {
cv::Mat image1 = cv::imread("img1.jpg");
cv::Mat image2 = cv::imread("img2.jpg");
cv::resize(image2, image2, image1.size());
cv::Mat outImage = cvConcatenateMat(image1, image2, false);
cv::imshow("out image", outImage);
cv::waitKey(0);
return 0;
}
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 平均图像时图像损坏
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 有没有办法将两个输入图像堆叠到卤化物发生器中的单个 4 维缓冲区中?
- 存储将单个查询图像与多个图像的列表匹配的关键点索引
- 从单个图像进行3D面部重建
- 如果存在查询图像,则可以通过数据库中的单个图像获得面部识别
- 单个图像的超分辨率 C/C++ 源代码
- 从图像阵列创建单个图像
- 从图像中检测和分离单个未知物体(计算机视觉)
- 使用 OpenCV 3.0 和 MSVS 12 在单个窗口上显示多个图像
- OpenCV背景分割/从单个图像中减去
- 如何从图像矢量复制单个图像到临时cv::Mat
- GTKMM::在GTk::绘图区域使用单个Gdk::PixBuf绘制多个图像
- 将单个字体字符转换为位图像素数组