当前位置: 首页 > news >正文

opencv图像卷积操作和常用的图像滤波函数

文章目录

      • opencv图像卷积操作原理,opencv中常用的图像滤波函数
      • 一、图像卷积操作原理:
        • 1、卷积操作原理图:
      • 二、opencv常用的图像滤波函数:这些函数的主要作用是对图像进行平滑处理或去除噪声(核心目的是减少图像中的噪声,使图像变得更加平滑);
        • 1、cv::blur()函数:英文全拼blur
          • (1)函数原型:
          • (2)代码示例:
        • 2、cv::boxFilter()函数:
          • (1)函数原型:
          • (2)cv.blur() 均值滤波器与cv.boxFilter() 方框滤波器的区别:
            • 核的定义:
            • 参数不同:
            • 功能略有差异:
            • 总结:
          • (3)代码示例:
        • 3、cv::GuassianBlur()函数:
          • (1)函数原型:
          • (2)代码示例:
        • 4、cv::medianBlur()函数:
          • (1)函数原型:
          • (2)代码示例:
        • 5、cv::bilateralFilter()函数:
          • (1)函数原型:
          • (2)代码示例:
        • 6、cv2::filter2D()函数:
          • (1)函数原型:
          • (2)代码示例:

opencv图像卷积操作原理,opencv中常用的图像滤波函数

一、图像卷积操作原理:

卷积是图像处理中常用的操作之一,它通过在图像上滑动一个滤波器(也称为卷积核)来实现对图像的处理,每个滤波器(卷积核)都是一个小的矩阵,它包含一组权重值;

1、卷积操作原理图:
  • 将滤波器(卷积核)与图像的一个小区域相乘;
  • 将得到的乘积相加,得到一个新的像素值;
  • 通过不断滑动滤波器(卷积核),对整幅图像进行处理,从而得到一幅经过卷积操作的图像;
    在这里插入图片描述
    计算过程图:
    在这里插入图片描述

二、opencv常用的图像滤波函数:这些函数的主要作用是对图像进行平滑处理或去除噪声(核心目的是减少图像中的噪声,使图像变得更加平滑);

1、cv::blur()函数:英文全拼blur

均值滤波器(平均滤波器),用于图像模糊(平滑)处理的函数,它将图像中的每个像素值替换为其周围像素值的平均值,从而实现图像的模糊效果;

(1)函数原型:
void cv::blur(InputArray src, OutputArray dst, Size ksize, Point anchor = Point(-1,-1), int borderType = BORDER_DEFAULT
);参数解释:
src:输入图像,可以是单通道或多通道图像(如灰度图或彩色图);
dst:输出图像;
ksize:卷积核,用cv::Size(width, height)来指定,例如(3,3)表示一个3x3的卷积核,通常使用奇数大小的核;
anchor:锚点,默认为卷积核的中心,默认值Point(-1, -1);
borderType:图像边缘处的像素填充方式(cv::BORDER_CONSTANT:在图像边缘处的像素,用常数填充,这个常数由cv::Scalar()函数指定,默认为黑色;cv::BORDER_REPLICATE:在图像边缘处的像素,用最边界的像素值来填充;cv::BORDER_DEFAULT:根据具体情况选择最合适的边界处理方式,默认值;
)
(2)代码示例:
#include <opencv2\opencv.hpp>
#include <iostream>
#include <demo.h>using namespace cv;
using namespace std;int main() {// 读取彩色图像cv::Mat image = cv::imread("C:\\cpp\\image\\suzy1.jpg");if (image.empty()) {std::cerr << "Error: 无法读取图像文件." << std::endl;return -1;}cv::Mat outputImage;cv::Size kernelSize(5, 5);cv::blur(image, outputImage, kernelSize);cv::imshow("Input Image", image);cv::imshow("Blurred Image", outputImage);cv::waitKey(0);return 0;}

运行结果:
在这里插入图片描述

2、cv::boxFilter()函数:

方框滤波器(均值滤波器的一种变体),方框滤波器与均值滤波器类似,通过计算图像中每个像素周围邻域像素的加权平均值来减少噪声,但相比 cv::blur()cv::boxFilter()可以指定不同的归一化方式;

(1)函数原型:
void cv::boxFilter(cv::InputArray src,cv::OutputArray dst,int ddepth,cv::Size ksize,cv::Point anchor = cv::Point(-1,-1),bool normalize = true,int borderType = cv::BORDER_DEFAULT
);参数解释:
src:输入图像,可以是单通道或多通道图像(如灰度图或彩色图);
dst:输出图像,与输入图像具有相同的尺寸和通道数;
ddepth:输出图像的深度,通常使用-1表示与输入相同;
ksize:卷积核,用cv::Size(width, height)来指定,例如(3,3)表示一个3x3的卷积核,通常使用奇数大小的核;
anchor:锚点,默认为卷积核的中心,默认值Point(-1, -1);
normalize:是否对结果进行归一化,默认为true;
borderType:图像边缘处的像素填充方式(cv::BORDER_CONSTANT:在图像边缘处的像素,用常数填充,这个常数由cv::Scalar()函数指定,默认为黑色;cv::BORDER_REPLICATE:在图像边缘处的像素,用最边界的像素值来填充;cv::BORDER_DEFAULT:根据具体情况选择最合适的边界处理方式,默认值;
)
(2)cv.blur() 均值滤波器与cv.boxFilter() 方框滤波器的区别:

cv::blur()cv::boxFilter() 都是用于图像平滑处理的滤波器,它们的核心目的是减少图像中的噪声,使图像变得更加平滑;

核的定义:
  • cv::blur() 的核是一个归一化的平均核,也就是说核内所有元素的和为1(这表示在滤波过程中,像素值被取平均值);
  • cv::boxFilter() 的核不一定是归一化的,可以通过 normalize 参数控制是否归一化(这使得方框滤波器可以对像素进行加权平均);
参数不同:
  • cv::blur() 接受一个 cv::Size 参数作为核的大小,通常使用奇数大小的核;
  • cv::boxFilter() 接受一个整数参数作为核的大小,可以使用偶数大小的核;
功能略有差异:
  • 由于 cv::boxFilter() 可以选择是否归一化,因此它可以用于一些特殊情况下的平滑处理,比如图像锐化;
  • cv::blur() 更适合通用的平滑处理;
总结:

总的来说,这两个函数都可以用于图像平滑处理,选择使用哪个取决于你的具体需求以及想要实现的效果,如果你只是需要一个简单的平滑处理,通常使用 cv::blur() 就足够了,如果你需要更多的控制,或者想要尝试一些特殊的滤波效果,可以考虑使用 cv::boxFilter()

(3)代码示例:
#include <opencv2\opencv.hpp>
#include <iostream>
#include <demo.h>using namespace cv;
using namespace std;int main() {// 读取彩色图像cv::Mat image = cv::imread("C:\\cpp\\image\\suzy1.jpg");if (image.empty()) {std::cerr << "Error: 无法读取图像文件." << std::endl;return -1;}cv::Mat outputImage;cv::Size kernelSize(5, 5);cv::boxFilter(image, outputImage, -1, kernelSize);cv::imshow("Input Image", image);cv::imshow("Box Filtered Image", outputImage);cv::waitKey(0);return 0;}

运行结果:
在这里插入图片描述

3、cv::GuassianBlur()函数:

高斯滤波器,对输入图像中的每个像素施加一个高斯函数作为权重,从而实现平滑处理,通过应用高斯滤波器来减少图像中的噪声,会较明显地模糊边缘;

(1)函数原型:
void cv::GaussianBlur(cv::InputArray src,  cv::OutputArray dst,  cv::Size ksize,  double sigmaX,  double sigmaY = 0,   int borderType = cv::BORDER_DEFAULT
);参数解释:
src:输入图像,可以是单通道或多通道图像(如灰度图或彩色图);
dst:输出图像,与输入图像具有相同的尺寸和通道数;
ksize:卷积核,用cv::Size(width, height)来指定,例如(3,3)表示一个3x3的卷积核,通常使用奇数大小的核;
sigmaX:X方向的高斯核标准差;
sigmaY:Y方向的高斯核标准差,如果为零则默认与sigmaX相同;
borderType:图像边缘处的像素填充方式(cv::BORDER_CONSTANT:在图像边缘处的像素,用常数填充,这个常数由cv::Scalar()函数指定,默认为黑色;cv::BORDER_REPLICATE:在图像边缘处的像素,用最边界的像素值来填充;cv::BORDER_DEFAULT:根据具体情况选择最合适的边界处理方式,默认值;
)
(2)代码示例:
#include <opencv2\opencv.hpp>
#include <iostream>
#include <demo.h>using namespace cv;
using namespace std;int main() {// 读取彩色图像cv::Mat inputImage = cv::imread("C:\\cpp\\image\\suzy1.jpg");if (inputImage.empty()) {std::cerr << "Error: 无法读取图像文件." << std::endl;return -1;}cv::Mat outputImage;cv::Size kernelSize(5, 5);double sigmaX = 1.5;cv::GaussianBlur(inputImage, outputImage, kernelSize, sigmaX);cv::imshow("Input Image", inputImage);cv::imshow("Gaussian Blurred Image", outputImage);cv::waitKey(0);return 0;}

运行结果:
在这里插入图片描述

4、cv::medianBlur()函数:

中值滤波器,对输入图像进行平滑处理,通过用邻域像素的中值来替代当前像素的值,从而减少图像中的噪声,是一种常用于去除图像中的椒盐噪声(salt-and-pepper noise)的非线性滤波器;

(1)函数原型:
void cv::medianBlur(cv::InputArray src,         cv::OutputArray dst,        int ksize                   
);参数解释:
src:输入图像,可以是单通道或多通道图像(如灰度图或彩色图);
dst:输出图像,与输入图像具有相同的尺寸和通道数;
ksize:卷积核,通常为奇数,用cv::Size(width, height)来指定,通常使用奇数大小的核;
(2)代码示例:
#include <opencv2\opencv.hpp>
#include <iostream>
#include <demo.h>using namespace cv;
using namespace std;int main() {// 读取彩色图像cv::Mat inputImage = cv::imread("C:\\cpp\\image\\suzy1.jpg");if (inputImage.empty()) {std::cerr << "Error: 无法读取图像文件." << std::endl;return -1;}cv::Mat outputImage;int kernelSize = 5; // 选择一个奇数大小的核cv::medianBlur(inputImage, outputImage, kernelSize);cv::imshow("Input Image", inputImage);cv::imshow("Median Blurred Image", outputImage);cv::waitKey(0);return 0;}

运行结果:
在这里插入图片描述

5、cv::bilateralFilter()函数:

双边滤波器,双边滤波器顾名思义比高斯滤波多了一个高斯方差sigma-d,所以在边缘附近,离的较远的像素不会太多影响到边缘上的像素值,这样就保证了边缘附近像素值的保存;

(1)函数原型:
void cv::bilateralFilter(cv::InputArray src,         cv::OutputArray dst,        int d,                      double sigmaColor,          double sigmaSpace,         int borderType = cv::BORDER_DEFAULT  
);参数解释:src:输入图像,可以是单通道或多通道图像(如灰度图或彩色图);
dst:输出图像,与输入图像具有相同的尺寸和通道数;
d:控制在颜色空间中滤波器的直径,通常在3-5之间;
sigmaColor:控制颜色相似性的标准差,值越大,颜色差异越大;
sigmaSpace:控制空间相似性的标准差,值越大,范围内像素权重越大;
borderType:图像边缘处的像素填充方式(cv::BORDER_CONSTANT:在图像边缘处的像素,用常数填充,这个常数由cv::Scalar()函数指定,默认为黑色;cv::BORDER_REPLICATE:在图像边缘处的像素,用最边界的像素值来填充;cv::BORDER_DEFAULT:根据具体情况选择最合适的边界处理方式,默认值;
)
(2)代码示例:
#include <opencv2\opencv.hpp>
#include <iostream>
#include <demo.h>using namespace cv;
using namespace std;int main() {// 读取彩色图像cv::Mat inputImage = cv::imread("C:\\cpp\\image\\suzy1.jpg");if (inputImage.empty()) {std::cerr << "Error: 无法读取图像文件." << std::endl;return -1;}cv::Mat outputImage;int d = 9; // 直径double sigmaColor = 75; // 颜色相似性标准差double sigmaSpace = 75; // 空间相似性标准差cv::bilateralFilter(inputImage, outputImage, d, sigmaColor, sigmaSpace);cv::imshow("Input Image", inputImage);cv::imshow("Bilateral Filtered Image", outputImage);cv::waitKey(0);return 0;}

运行结果:
在这里插入图片描述

6、cv2::filter2D()函数:

对输入图像进行二维卷积操作,通过将一个核应用于图像的每个像素,从而实现特定的图像处理效果,如边缘检测、模糊等;

(1)函数原型:
void cv::filter2D(cv::InputArray src,       cv::OutputArray dst,  int ddepth,          cv::InputArray kernel,  cv::Point anchor = cv::Point(-1,-1),double delta = 0,   int borderType = cv::BORDER_DEFAULT  
);参数解释:
src:输入图像,可以是单通道或多通道图像(如灰度图或彩色图);
dst:输出图像,与输入图像具有相同的尺寸和通道数;
ddepth:输出图像的深度,通常使用-1表示与输入相同;
kernel:卷积核,用于定义卷积操作的权重矩阵;
anchor:锚点,默认为卷积核的中心,默认值Point(-1, -1);
delta:可选参数,用于调节卷积结果的偏移值,默认为0;
borderType:图像边缘处的像素填充方式(cv::BORDER_CONSTANT:在图像边缘处的像素,用常数填充,这个常数由cv::Scalar()函数指定,默认为黑色;cv::BORDER_REPLICATE:在图像边缘处的像素,用最边界的像素值来填充;cv::BORDER_DEFAULT:根据具体情况选择最合适的边界处理方式,默认值;
)
(2)代码示例:
#include <opencv2\opencv.hpp>
#include <iostream>
#include <demo.h>using namespace cv;
using namespace std;int main() {// 读取彩色图像cv::Mat inputImage = cv::imread("C:\\cpp\\image\\suzy1.jpg");if (inputImage.empty()) {std::cerr << "Error: 无法读取图像文件." << std::endl;return -1;}cv::Mat kernel = (cv::Mat_<float>(3, 3) <<0, -1, 0,-1, 5, -1,0, -1, 0);cv::Mat outputImage;cv::filter2D(inputImage, outputImage, -1, kernel);cv::imshow("Input Image", inputImage);cv::imshow("Filtered Image", outputImage);cv::waitKey(0);return 0;}

运行结果:
在这里插入图片描述

相关文章:

opencv图像卷积操作和常用的图像滤波函数

文章目录 opencv图像卷积操作原理&#xff0c;opencv中常用的图像滤波函数一、图像卷积操作原理&#xff1a;1、卷积操作原理图&#xff1a; 二、opencv常用的图像滤波函数&#xff1a;这些函数的主要作用是对图像进行平滑处理或去除噪声(核心目的是减少图像中的噪声&#xff0…...

习题1. 31

话不多说 先上代码 (defn product [ term a nxt b](defn iter [a result](if (> a b)1 (* (term a) (iter (nxt a) result))))(iter a 1)) 跟习题1.30比较起来&#xff0c;就是两个地方不同 乘法不能乘0 必须是1。难度来讲&#xff0c;跟1.30难度是一样的。增加了迭代过…...

见微知著:从企业售后技术支持看云计算发展

作者&#xff1a;余凯 售后业务中的细微变化 作为阿里云企业容器技术支持的一员&#xff0c;每天会面对全球各地企业级客户提出的关于容器的各种问题&#xff0c;通过这几年的技术支持的经历&#xff0c;逐步发现容器问题客户的一些惯性&#xff0c;哪些是重度用户&#xff0…...

C++笔记之如何给 `const char*` 类型变量赋值

C笔记之如何给 const char* 类型变量赋值 code review! 文章目录 C笔记之如何给 const char* 类型变量赋值1.在C中&#xff0c;如果你要给一个 const char* 变量赋值&#xff0c;你通常有几种方法来做这件事&#xff0c;具体取决于你的需求。下面是一些常见的方法&#xff1a;…...

9.Linear Maps

线性映射 线性映射是将向量作为输入并产生一些新向量作为输出的转换。 从坐标定义开始(数组)&#xff0c;再到2&#xff0c;3&#xff0c;并展示它们是如何关联的 线性映射的坐标表示最终是矩阵&#xff0c; 1.坐标定义&#xff08;数组&#xff09; 列向量是向量的坐标表示…...

大数据Doris(十):添加BE步骤

文章目录 添加BE步骤 一、使用mysql连接 二、​​​​​​​添加be...

Vue2 +Element UI 表格行合并

如果相邻数据是一致的&#xff0c;则单元格的行合并,指定需要合并的列&#xff0c;下面我是指定合并了分类和类型这两列。 先看效果 Element UI为我们的<el-table>提供了一个属性span-method&#xff1a;合并行或列的计算方法 下面是一个示例: html部分 - 主要是在表上指…...

SuperEdge易学易用系列-一键搭建SuperEdge集群

条件说明&#xff1a; 系统 公网IP 内网IP 服务器所在地 K8S版本 Centos7.9 114.116.101.254 192.168.0.245 北京 v1.22.6 Centos7.9 119.8.1.96 192.168.0.83 香港 v1.22.6 Ubuntu22 94.74.108.152 192.168.0.154 纽约 v1.22.6 1. 开始部署 1.1 两条指令从零搭建一个边缘集…...

农场养殖农产品商城小程序搭建

鸡鸭羊牛鱼养殖用户不少&#xff0c;其规模也有大有小&#xff0c;尤其对一些生态养殖企业&#xff0c;其产品需求度更高&#xff0c;同时他们也有实际的销售需求。 由于具备较为稳定的货源&#xff0c;因此大规模多规格销售属性很足。 通过【雨科】平台搭建农场养殖商城&…...

大语言模型之十七-QA-LoRA

由于基座模型通常需要海量的数据和算力内存&#xff0c;这一巨大的成本往往只有巨头公司会投入&#xff0c;所以一些优秀的大语言模型要么是大公司开源的&#xff0c;要么是背后有大公司身影公司开源的&#xff0c;如何从优秀的开源基座模型针对特定场景fine-tune模型具有广大的…...

UML组件图综合指南:设计清晰、可维护的软件系统

介绍&#xff1a; UML&#xff08;Unified Modeling Language&#xff09;组件图是软件系统设计中的重要工具&#xff0c;用于描绘系统的物理结构和组件之间的关系。在软件工程中&#xff0c;通过创建清晰的组件图&#xff0c;团队能够更好地理解系统的模块化结构和组织关系&a…...

深入浅出ThreadPoolExecutor(一)

文章目录 线程池简诉ThreadPoolExecutor详解ThreadPoolExecutor参数详解创建线程池的工具类Executors 线程池简诉 针对各种池子,比如 连接池:用于管理和重复使用数据库连接&#xff0c;避免频繁创建和销毁数据库连接带来的性能开销。对象池&#xff1a;用于管理和重复使用对象…...

网站的常见攻击与防护方法

在互联网时代&#xff0c;几乎每个网站都存在着潜在的安全威胁。这些威胁可能来自人为失误&#xff0c;也可能源自网络犯罪团伙所发起的复杂攻击。无论攻击的本质如何&#xff0c;网络攻击者的主要动机通常是谋求经济利益。这意味着无论您经营的是电子商务项目还是小型商业网站…...

网络工程师知识点3

41、各个路由协议&#xff0c;在华为设备中的优先级&#xff1f; 直连路由 0 OSPF 10 静态 60 42、OSPF&#xff1a;开放式最短路径优先路由协议&#xff0c;使用SPF算法发现和计算路由 OSPF的优点&#xff1a; 1、收敛速度快&#xff0c;无路由自环&#xff0c;适用于大型网络…...

mongoDB 性能优化

文章目录 前言mongoDB 性能优化1. explain方法来查看查询的执行计划2. 查看mongoDB 集合的索引3. mongoDB 怎么添加索引4. 升序索引与降序索引是什么意思 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易…...

10月13日,每日信息差

今天是2023年10月13日&#xff0c;以下是为您准备的13条信息差 第一、欧盟投资4.5亿欧元在法国建设电池超级工厂。欧洲投资银行是欧盟的贷款机构&#xff0c;也是世界上最大的跨国银行之一 ​第二、北京银行推出数字人民币智能合约平台 数字人民币预付资金管理产品在商超场景…...

Spring Boot 中的 Redis 数据操作配置和使用

Spring Boot 中的 Redis 数据操作配置和使用 Redis&#xff08;Remote Dictionary Server&#xff09;是一种高性能的开源内存数据库&#xff0c;用于缓存、消息队列、会话管理和数据存储。在Spring Boot应用程序中&#xff0c;Redis被广泛用于各种用例&#xff0c;包括缓存、…...

rust宏

宏看起来和函数很像&#xff0c;只不过名称末尾有一个感叹号 ! 。 宏并不产生函数调用&#xff0c;而是展开成源码&#xff0c;并和程序的其余部分一起被编译。 Rust宏和C不同&#xff0c;Rust的宏会展开为抽象语法树&#xff08;AST&#xff0c;abstract syntax tree&#xff…...

性能测试之性能测试指标详解

前言 刚开始&#xff0c;以为做性能测试&#xff0c;就是做些脚本、参数化、关联&#xff0c;压起来之后&#xff0c;再扔出一个结果。 但实际上不止这些内容&#xff0c;还要加上性能分析&#xff0c;关注调优之后响应时间有多大的提升&#xff0c;TPS 有多大的提高&#xf…...

CustomNavBar 自定义导航栏视图

1. 创建偏好设置键 CustomNavBarTitlePreferenceKey.swift import Foundation import SwiftUI//State private var showBackButton: Bool true //State private var title: String "Title" //"" //State private var subtitle: String? "SubTitl…...

canal rocketmq

上篇文章canal 消费进度说到直接使用ClusterCanalConnector并发消费是有问题的&#xff0c;可以先用单点将canal事件发送到mq中&#xff0c;再由mq并发处理&#xff0c;另外mq还可以做到削峰的作用&#xff0c;让canal数据不至于阻塞。 使用队列&#xff0c;可以自己起一个单实…...

【数据库系统概论】第九章关系查询处理何查询优化

9.1查询处理 一&#xff1a;查询处理步骤 关系数据库管理系统查询处理可以分为4个阶段&#xff1a; 查询分析查询检查查询优化查询执行 &#xff08;1&#xff09;查询分析 任务&#xff1a;对查询语句进行扫描&#xff0c;分析词法、语法是否符合SQL语法规则 如果没有语…...

bp盐丘模型波场数值模拟matlab

波场数值模拟是地震勘探和地震学研究中常用的工具&#xff0c;而BP&#xff08;Backpropagation&#xff09;盐丘模型是一种用于地下介质成像的方法。如果您想在MATLAB中进行波场数值模拟&#xff0c;并结合BP盐丘模型进行地下成像&#xff0c;可以按照以下步骤进行&#xff1a…...

结构体对齐规则

1.第一个成员在结构体变量偏移量为0的地址处。 2.其他成员变量对齐到某个数字(对齐数)的整数倍的地址处。(对齐数编译器默认的一个对齐数与该成员大小的较小值&#xff09;注意&#xff1a;目前有且只有VS编译器有默认为8. 3.结构体总大小为最大对齐数的整数倍。 4.如果嵌套…...

css 如何让元素内部文本和外部文本 一块显示省略号

实际上还是有这样的需求的 <div class"container"><span>啊啊啊啊啊啊啊啊</span>你好啊撒撒啊撒撒撒撒啊撒撒撒撒撒说</div>还是有这样的需求的哦。 div.container {width: 200px;white-space: nowrap;text-overflow: ellipsis;overflow:…...

SQL语句-中级

一、Mysql软件使用 1.启动/停止Mysql服务器 任务管理器 cmd命令&#xff1a;以管理员的身份打开cmd命令行 net start mysql80//开启net stop mysql80//停止 2.连接与断开Mysql服务器 注意要在bin目录下执行:-u用户名root&#xff0c;-p密码 mysql -u root -p 可能出现的…...

巧用h2-database.jar连接数据库

文章目录 一 、概述二、实践三、解决办法 一 、概述 H2 Database是一个开源的嵌入式数据库引擎&#xff0c;采用java语言编写&#xff0c;不受平台的限制&#xff0c;同时H2 Database提供了一个十分方便的web控制台用于操作和管理数据库内容。H2 Database还提供兼容模式&#…...

136.只出现一次的数字

136. 只出现一次的数字 - 力扣&#xff08;LeetCode&#xff09; 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且…...

mysql中遇到查询字段的别名与函数冲突问题

比如以下哎&#xff0c;我查询城市行业数量排名 select City, DENSE_RANK() over(ORDER BY COUNT(Id) DESC) rank, COUNT(Id) num,IndustrySubGroupName from base_companyinfo WHERE IndustrySubGroupName工业机器人 GROUP BY City 上面使用 DENSE_RANK() 函数来计算排名&am…...

直播获奖

题目描述 NOI2130 即将举行。为了增加观赏性&#xff0c; CCF 决定逐一评出每个选手的成 绩&#xff0c;并直播即时的获奖分数线。本次竞赛的获奖率为 &#x1d464;% &#xff0c;即当前排名前 &#x1d464;% 的选手的最低成绩就是即时的分数线。 更具体地&#xff0c…...