使用vs2019,生成三层影像金字塔且可以输出图片的c++代码
时间: 2023-06-18 08:07:18 浏览: 43
以下是使用OpenCV库生成三层影像金字塔并输出图片的C++代码示例:
```cpp
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
// 读取图片
Mat img = imread("test.jpg");
// 定义金字塔层数
int levels = 3;
// 创建金字塔
vector<Mat> pyramid(levels);
pyramid[0] = img; // 第一层为原始图像
for (int i = 1; i < levels; ++i)
{
// 缩小图像
pyrDown(pyramid[i - 1], pyramid[i]);
}
// 显示金字塔图像并输出
for (int i = 0; i < levels; ++i)
{
imshow("pyramid" + to_string(i), pyramid[i]);
imwrite("pyramid" + to_string(i) + ".jpg", pyramid[i]);
}
waitKey();
return 0;
}
```
注:以上代码需要在VS2019中添加OpenCV库,并在项目属性中的VC++目录中添加包含和库目录。
相关问题
使用vs2019,不引用库函数生成三层影像金字塔且可以输出图片的c++语言代码
以下是一个简单的示例代码,通过使用OpenCV库来生成三层影像金字塔,并将其输出为图像文件。
```c++
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
// 读取输入图像
Mat input_img = imread("input.jpg", IMREAD_GRAYSCALE);
// 检查图像是否成功读取
if (input_img.empty())
{
cout << "无法读取输入图像!" << endl;
return -1;
}
// 创建高斯金字塔
vector<Mat> gaussian_pyramid;
buildPyramid(input_img, gaussian_pyramid, 3);
// 输出金字塔图像
for (int i = 0; i < gaussian_pyramid.size(); i++)
{
string filename = "gaussian_pyramid_" + to_string(i+1) + ".jpg";
imwrite(filename, gaussian_pyramid[i]);
}
return 0;
}
```
在此示例代码中,首先使用`imread`函数读取名为"input.jpg"的图像。然后使用`buildPyramid`函数生成高斯金字塔,其中第二个参数为一个空的`vector`,第三个参数表示金字塔的层数。最后,使用`imwrite`函数将每层金字塔输出为单独的图像文件。
请注意,这个示例代码中使用了OpenCV库,因此需要安装OpenCV库并将其添加到项目中。
使用vs2019,不引用库函数生成三层影像金字塔且可以输出图片的c语言代码
以下是一个简单的三层影像金字塔生成代码,使用C语言编写,不需要引用任何库函数。在Windows下使用VS2019进行编译运行。
```c
#include <stdio.h>
#include <stdlib.h>
#define WIDTH 256
#define HEIGHT 256
void generate_pyramid(unsigned char* image, unsigned char* pyramid)
{
int i, j, k;
int width = WIDTH, height = HEIGHT;
// 第一层
for (i = 0; i < height; i += 2)
{
for (j = 0; j < width; j += 2)
{
int idx = i * width + j;
pyramid[idx / 4] = image[idx];
}
}
// 第二层
width /= 2;
height /= 2;
for (k = 1; k < 3; k++)
{
for (i = 0; i < height; i++)
{
for (j = 0; j < width; j++)
{
int idx = i * width * 2 + j * 2;
int idx1 = i * width + j;
int idx2 = (i + height) * width + j;
int idx3 = i * width + j + width;
int idx4 = (i + height) * width + j + width;
int sum = image[idx] + image[idx1] + image[idx2] + image[idx3] + image[idx4];
pyramid[(k * height * width + idx1) / 4] = sum / 5;
}
}
width /= 2;
height /= 2;
}
}
void write_image(const char* filename, unsigned char* image, int width, int height)
{
FILE* fp;
int i, j;
fp = fopen(filename, "wb");
if (!fp)
{
printf("Error: Couldn't open %s for writing!\n", filename);
return;
}
fprintf(fp, "P5\n%d %d\n255\n", width, height);
for (i = 0; i < height; i++)
{
for (j = 0; j < width; j++)
{
fputc(image[i * width + j], fp);
}
}
fclose(fp);
}
int main()
{
unsigned char* image = (unsigned char*)malloc(WIDTH * HEIGHT * sizeof(unsigned char));
unsigned char* pyramid = (unsigned char*)malloc(WIDTH * HEIGHT / 4 * sizeof(unsigned char));
int i, j;
// 生成一张随机的灰度图像
for (i = 0; i < HEIGHT; i++)
{
for (j = 0; j < WIDTH; j++)
{
image[i * WIDTH + j] = rand() % 256;
}
}
// 生成三层影像金字塔
generate_pyramid(image, pyramid);
// 输出三层影像金字塔
write_image("pyramid0.pgm", image, WIDTH, HEIGHT);
write_image("pyramid1.pgm", pyramid + WIDTH * HEIGHT / 16, WIDTH / 2, HEIGHT / 2);
write_image("pyramid2.pgm", pyramid + WIDTH * HEIGHT / 16 + WIDTH * HEIGHT / 64, WIDTH / 4, HEIGHT / 4);
free(image);
free(pyramid);
return 0;
}
```
这个代码生成一张随机的灰度图像,然后生成三层影像金字塔,并输出三层金字塔的图片。可以通过修改WIDTH和HEIGHT来调整图像的大小,也可以通过修改generate_pyramid函数来生成不同层数的金字塔。