21xrx.com
2024-09-19 10:02:23 Thursday
登录
文章检索 我的文章 写文章
用C++将图片保存到新数组中
2023-07-06 22:10:09 深夜i     --     --
C++ 图片 保存 新数组

在C++程序中,将图片保存到新数组中是一种常见的处理方式。通过将图片读取进来,然后将每个像素点的值存储到新的数组中,就可以实现图片的保存。

首先,需要使用C++中的图像处理库,如OpenCV,来读取原始图像。可以使用以下代码来读取图像:


#include <opencv2/opencv.hpp>

using namespace cv;

int main(int argc, char** argv)

{

 Mat image;

 image = imread("image.jpg", IMREAD_COLOR); // Replace image.jpg with your image file name

 imshow("Original Image", image);

 waitKey(0);

 return 0;

}

在这个例子中,使用了OpenCV中的imread函数来读取位于程序同级目录下的“image.jpg”文件。IMREAD_COLOR参数指定读取图像时将其转换为RGB格式。

接下来,可以创建一个新的二维数组来存储各像素点的RGB值。这个新数组的大小应该与原始图像的大小相同,可以使用以下代码创建:


int height = image.rows;

int width = image.cols;

unsigned char **newImage = new unsigned char*[height];

for(int i = 0; i < height; i++) {

 newImage[i] = new unsigned char[3*width];

}

这个新的二维数组newImage存储的每个值都是0。

最后,可以使用以下代码将原始图像的像素值写入到新数组中:


for(int i = 0; i < height; i++) {

 for(int j = 0; j < width; j++) {

  newImage[i][3*j] = image.at<Vec3b>(i,j)[0]; // blue channel value

  newImage[i][3*j+1] = image.at<Vec3b>(i,j)[1]; // green channel value

  newImage[i][3*j+2] = image.at<Vec3b>(i,j)[2]; // red channel value

 }

}

在这个例子中,使用了OpenCV中的at函数和Vec3b类型来访问各像素点的蓝、绿、红三个通道的值,并将其存储到新数组的同一个位置上。

所以,这样就可以将原始图像的像素值保存到新数组中。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复