Opencv9:实现图像尺寸压缩(降采样)功能

(1)实现功能:

对图像实现一个类似于最大池化(max-pooling)的功能,缩减图像的尺寸,用n*n局部内灰度值最大的像素替换这个n*n局部块。

稍加改动,可以实现类似平均池化(用n*n局部内像素的灰度平均值替换)的功能,或将n*n替换为m*n等。

(2)实现思路:

首先,将源图像边界扩充至可以整除设置好的sigma值(即图像尺寸缩小倍数,也是所取局部块的尺寸);

然后,对输出图像(降采样后图像)进行尺寸设置;

外两层循环以sigma的间隔遍历源图像上的像素,内两层循环对当前源图像像素附近的局部块进行最大像素值计算;

最后对输出图像上像素赋予像素值,其中输出图像像素值的索引以统计外层循环次数的方式获取,赋予的像素值为上一步计算出的局部最大像素值。

(3)实现代码:

#include <opencv2/opencv.hpp>
#include <iostream>
#include "FunctionsHalcon.h"
using namespace cv;
using namespace std;//图像尺寸缩减函数
void ReductionImage(const Mat image, Mat &imageReduction, int sigma)
{//[1]int rows = image.rows;int cols = image.cols;int ra = rows%sigma;int ca = cols%sigma;//[2]边界扩充,设置输出图像尺寸Mat imageDilate;copyMakeBorder(image, imageDilate, 0, ra, 0, ca, BORDER_REFLECT);imageReduction = Mat::zeros(imageDilate.size() / sigma, CV_8U);//[3]像素值计算int indexR = 0;for (int i = sigma/2;i<rows + ra- 2;i=i+sigma){int indexC = 0;for (int j = sigma/2;j<cols + ca- 2;j = j + sigma){//1.记录下块内灰度值,找出最大值int maxgray=0;for (int a = i - sigma / 2; a <= i + sigma / 2; a++){for (int b = j - sigma / 2; b <= j + sigma / 2; b++){if (imageDilate.at<uchar>(a,b) > maxgray){maxgray = imageDilate.at<uchar>(a, b);}}}//2.块内最大值并赋给输出图像的当前像素imageReduction.at<uchar>(indexR, indexC) = maxgray;indexC++;}indexR++;}
}//3.主函数
int main(int argc, char *argv[])
{//【1】图像读取Mat image = imread("3-3.png", 0);Mat imageInt;image.convertTo(imageInt, CV_8U);//【2】图像尺寸缩小Mat imageReduction;ReductionImage(imageInt,imageReduction, 15);//【3】结果显示imshow(" window1", image);imshow(" window2", imageReduction);waitKey(0);return 0;}

(4)运行结果:

①原图较大,直接显示sigma=3的处理结果:

②显示sigma=7的处理结果:

③ 显示sigma=9的处理结果:

④显示sigma=15的处理结果:

Opencv9:实现图像尺寸缩减(降采样)功能相关推荐

  1. VTK修炼之道30:图像重采样_降采样和升采样技术

    1.VTK中的图像重采样实现 图像重采样是指对采样后形成的由离散数据组成的数字图像按所需的像元位置或像元问距重新采样,以构成几何变换后的新图像.重采样过程本质上是图像恢复过程,它用输入的离散数字图像重 ...

  2. 可观测|时序数据降采样在Prometheus实践复盘

    作者:智真 基于 Prometheus 的监控实践中,尤其是在规模较大时,时序数据的存储与查询是其中非常关键,而且问题点较多的一环.如何应对大数据量下的长周期查询,原生的 Prometheus 体系并 ...

  3. 可观测|时序数据降采样在 Prometheus 实践复盘

    基于 Prometheus 的监控实践中,尤其是在规模较大时,时序数据的存储与查询是其中非常关键,而且问题点较多的一环.如何应对大数据量下的长周期查询,原生的 Prometheus 体系并未能给出一个 ...

  4. 下采样matlab代码,SIFT中的降采样和升采样及其MATLAB实现

    降采样: 对于一幅图像而言的降采样就是每隔几行.几列得到取一点,组成一个新的图像.以比例因子为2(fact of 2)的降采样来说:就是対一幅图像每隔一行一列取一点.对于n×n的图像就变为n/2×n/ ...

  5. matlab 降采样 平均,[转载]SIFT中的降采样和升采样及其MATLAB实现

    降采样: 对于一幅图像而言的降采样就是每隔几行.几列得到取一点,组成一个新的图像.以比例因子为2(fact of 2)的降采样来说:就是対一幅图像每隔一行一列取一点.对于n×n的图像就变为n/2×n/ ...

  6. python图像降采样_OpenCV:十一、图像上采样和降采样

    前言 目标 本章中,将学习: 图像金字塔概念 采样API 代码演示 图像金字塔概念 图像金字塔是图像中对尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构. 图像金 ...

  7. ECCV 2020 Oral | 可逆图像缩放:完美恢复降采样后的高清图片

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文介绍的是ECCV 2020 Oral论文<Inverti ...

  8. 上采样和下采样_OpenCV学习笔记(一)之图像金字塔-上采样与降采样与DOG

    一. 图像金字塔 一个图像金字塔式一系列的图像组成,最底下的图形尺寸最大,最上方的图像尺寸最小. 高斯金字塔是从底向上,逐层降采样得到的. 高斯金字塔的生成过程分为两步: 对当前层进行高斯模糊. 删除 ...

  9. opencv 的norm_OpenCV学习笔记(一)之图像金字塔-上采样与降采样与DOG

    一. 图像金字塔 一个图像金字塔式一系列的图像组成,最底下的图形尺寸最大,最上方的图像尺寸最小. 高斯金字塔是从底向上,逐层降采样得到的. 高斯金字塔的生成过程分为两步: 1. 对当前层进行高斯模糊. ...

最新文章

  1. mysql入门之事务处理
  2. 两个场景怎样合在一起_Spring AOP应用场景你还不知道?这篇一定要看
  3. hibernate的映射之二(一对多双向关联)
  4. PHP优于Node.js的五大理由
  5. 非对称加密算法 --- RSA签名算法
  6. 关于git diff的一个命令
  7. java经典密码算法,浅析五种最常用的Java加密算法,以后可以直接拿来用了
  8. 在VS 2010中查询和导航代码
  9. 谁设计python_如果你有设计师朋友,请对TA好一些...
  10. 算法导论PDF原文算法分享
  11. Linux 内核编程总结
  12. 数据库 --- 约束
  13. python 3.8.2安装教程
  14. java 反射 field.set,java 反射之Field
  15. 根据题目完成以下50道SQL语句
  16. GCC编译器高效利用cache的原理和参数
  17. Battery (Coin Change)
  18. Shell 循环检查的格式
  19. 旅行社如何通过抖音短视频获客?
  20. 360搜索引擎数据抓取

热门文章

  1. python怎么打出长下划线_python长的下划线怎么打
  2. 【路径规划】基于蜣螂优化算法的三维无人机路径规划(山区地形)【Matlab代码#12】
  3. [转载] 在Tiled Map中使用碰撞检测
  4. 机器学习之路--Matplotlib
  5. AI预测的七宗致命罪恶
  6. jpa读写钩子函数,数据库存储对象
  7. php float 最大长度,float范围是多少?
  8. 装备系统的合成-算法题
  9. python 打印机自动化_用Python实现定时自动化收取蚂蚁森林能量,再也不怕被偷了...
  10. s7android系统电量,后悔:测试显示三星S7 Edge升级安卓7.0后续航暴降