本科课程【数字图像处理】实验7 - 图像的平移与伸缩变换

x33g5p2x  于2022-05-27 转载在 其他  
字(2.1k)|赞(0)|评价(0)|浏览(491)

大家好,我是【1+1=王】, 热爱java的计算机(人工智能)渣硕研究生在读。
如果你也对java、人工智能等技术感兴趣,欢迎关注,抱团交流进大厂!!!
Good better best, never let it rest, until good is better, and better best.

近期会把自己本科阶段的一些课程设计、实验报告等分享出来,供大家参考,希望对大家有帮助。

博客更新至专栏【课程设计实验报告】:https://blog.csdn.net/weixin_43598687/category_11640051.html

一、 实验目的

1、 掌握图像的平移变换原理与操作
2、 掌握图像的伸缩变换原理与操作

二、 实验内容

1. 实验任务

编写程序实现图片的平移与伸缩变换

2. 程序设计

1) 原理


2) 流程
(1) 打开VC++,编写相应的图像平移、伸缩的代码;
(2) 运行程序,打开文件,得到效果图。

三、 实验环境

  1. 操作系统:WINDOWS 10
  2. 开发工具:Visual Studio
  3. 实验设备:PC

源代码

平移变换:

  1. //读原图
  2. Mat image;
  3. image = imread("pic.jpg", CV_LOAD_IMAGE_COLOR);
  4. if (!image.data)
  5. {
  6. cout << "找不到图片或无法打开图片\n";
  7. return -1;
  8. }
  9. namedWindow("image_source", CV_WINDOW_AUTOSIZE);
  10. imshow("原图", image);
  11. //--------------------平移变换--------------
  12. int dx = 10, dy = 20;
  13. Mat image_shift(image.rows + dx, image.cols+dy, CV_8UC3);
  14. //新建一个大于原图的图像,备用
  15. //一个个像素进行处理
  16. for (int counter1 = 0; counter1 < image.rows; counter1++)
  17. {
  18. for (int counter2 = 0; counter2 < image.cols; counter2++)
  19. {
  20. //将原坐标进行平移,并将原坐标上的RGB值赋给新坐标
  21. image_shift.at<Vec3b>(counter1+dx, counter2+dy)[0] = image.at<Vec3b>(counter1, counter2)[0];
  22. image_shift.at<Vec3b>(counter1+dx, counter2 + dy)[1] = image.at<Vec3b>(counter1, counter2)[1];
  23. image_shift.at<Vec3b>(counter1+dx , counter2+ dy)[2] = image.at<Vec3b>(counter1, counter2)[2];
  24. }
  25. }
  26. //imshow("平移", image_shift);
  27. imwrite("1.jpg", image_shift);
  28. //将平移后的图像存储为名称为1.jpg的文件
  29. //-------------- 平移完成-------------------

2)缩放变换

  1. double mul_num = 0.8;
  2. //大于1是放大,小于1是缩小
  3. int row_num = (int)floor(image.rows * mul_num), col_num = (int)floor(image.cols * mul_num);
  4. Mat image_scale(row_num, col_num, CV_8UC3);
  5. for (int counter1 = 0; counter1 < row_num; counter1++)
  6. {
  7. for (int counter2 = 0; counter2 < col_num; counter2++)
  8. {
  9. //将筛孔缩小,对上画的大小
  10. int x = (int)1.0 / mul_num *counter1, y = (int)1.0 / mul_num *counter2;
  11. image_scale.at<Vec3b>(counter1, counter2 )[0] = image.at<Vec3b>(x, y)[0];
  12. image_scale.at<Vec3b>(counter1, counter2 )[1] = image.at<Vec3b>(x, y)[1];
  13. image_scale.at<Vec3b>(counter1, counter2 )[2] = image.at<Vec3b>(x, y)[2];
  14. }
  15. } //imshow("尺度变换", image_scale);
  16. imwrite("2.jpg", image_scale);
  17. //存储变换后的图像

博客更新至专栏【课程设计实验报告】:https://blog.csdn.net/weixin_43598687/category_11640051.html

开发者涨薪指南

48位大咖的思考法则、工作方式、逻辑体系

相关文章