【Python】OpenCV库中常用函数详解和示例

news2025/1/12 19:59:26

在Python中,OpenCV(Open Source Computer Vision Library)是一个广泛使用的图像和视频处理库。它包含许多用于图像处理和计算机视觉任务的函数。本文对一些常用的OpenCV函数及其详细解释和示例,以帮助大家理解和使用。

目录

  • cv2.imread()
    • 函数解析
    • 运行示例
  • cv2.imshow()、cv2.waitKey()、cv2.destroyAllWindows()
    • cv2.imshow()
    • cv2.waitKey()
    • cv2.destroyAllWindows()
    • 示例
  • cv2.cvtColor()
    • 函数解析
    • 运行示例
  • cv2.blur()
    • 函数原理
    • 运行示例
  • cv2.threshold()
    • 函数解析
    • 运行示例
  • cv2.drawContours()
    • 函数解析
    • 运行示例
  • cv2.findContours()
    • 函数解析
    • 运行示例
  • cv2.bitwise_and()
    • 函数解析
    • 运行示例
  • cv2.inRange()
    • 函数解析
    • 运行示例

cv2.imread()

函数解析

cv2.imread() 是OpenCV库中的一个函数,用于读取图像文件。这个函数将图像读入为NumPy数组,适合处理.jpg,.png,.bmp,.tiff等常见格式的图像。

函数原型为:cv2.imread(filename, flags=1)

其中,filename 是要读取的图像文件的名称(包括路径,如果图像不在当前工作目录下)。
flags 参数用于指定读图的方式,它是一个可选参数,默认值为1。它可以接受的正整数值有以下几种可能:

1. cv2.IMREAD_COLOR:这是默认值,用于读取一张彩色图像。这种模式下,图像的三个通道分别是BGR(蓝,绿,红)。这种模式是直接从文件中读取RGB值。
2. cv2.IMREAD_GRAYSCALE:以灰度模式读取图像。
3. cv2.IMREAD_UNCHANGED:读取图像包括alpha通道。
4. 0:不进行任何操作,只读取文件信息。
5. -1:读取图像并检查其大小(如果需要的话)为8位、16位、32位或浮点型。


函数返回值是一个NumPy数组,它表示读取的图像。如果读取失败(例如文件不存在或无法打开),函数将返回None。

运行示例

import cv2
img1 = cv2.imread('image.jpg') 
img2 = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)  # 读取灰度图像
cv2.imshow('image1', img1)
cv2.imshow('image2', img2)
cv2.waitKey(0)

运行展示结果:
在这里插入图片描述
可以看到,改变flags 参数的值,尽管读取的是同一幅图像中但一个显示的是彩色图一个是灰度图。

**注意:**由于cv2.imread()函数会根据指定的模式(flags)读取图像,因此其返回的图像数据类型可能不同。例如,如果以cv2.IMREAD_GRAYSCALE模式读取图像,则返回的图像将是灰度图,数据类型为uint8;如果以cv2.IMREAD_COLOR模式读取图像,则返回的图像将是彩色图,数据类型通常为uint8,但也可能为float32或double,具体取决于读取的图像数据是否能被准确地表示为uint8。

cv2.imshow()、cv2.waitKey()、cv2.destroyAllWindows()

这三个函数都是OpenCV库中的函数,用于显示和关闭图像窗口。

cv2.imshow()

cv2.imshow('image', img):

参数:第一个参数是窗口名称,第二个参数是要显示的图像。

解释:这个函数用于在窗口中显示图像。如果你已经有了一个名为'image'的窗口,调用这个函数会覆盖该窗口中的图像。如果你没有名为'image'的窗口,这个函数会创建一个新窗口。

cv2.waitKey()



cv2.waitKey(0)

参数:该函数只有一个参数,通常是0或者是一个大于0的整数。
解释:这个函数会等待用户按下键盘上的任意键。参数0表示无限等待。如果参数大于0,函数会等待指定的毫秒数。例如,cv2.waitKey(5000)将等待5秒。如果在这段时间内用户按下了任意键,程序将继续执行;否则,程序将继续等待。

cv2.destroyAllWindows()

cv2.destroyAllWindows()

参数:该函数没有参数。
解释:这个函数会关闭所有由OpenCV创建的窗口。如果你在调用cv2.imshow()后想要确保窗口被关闭,通常会在显示完图像后调用这个函数。注意,这个函数不会影响由其他库(如matplotlib)创建的窗口。

示例

import cv2
img = cv2.imread('115.jpg')
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

读取图像,然后显示在“image”的窗口中,手动按任意键程序继续,最后关闭窗口。

cv2.cvtColor()

函数解析

cv2.cvtColor() 是 OpenCV 库中的一个函数,用于将图像从一种颜色空间转换到另一种颜色空间。这个函数非常有用,因为不同的颜色空间可以提供不同的图像处理和分析视角。

函数原型为:

cv2.cvtColor(src, code)

参数详解:

src: 源图像,这应该是一个 NumPy 数组。
code: 转换的标识符,这是一个整数,用于指定目标颜色空间。可能的值包括:
cv2.COLOR_BGR2BGRA:从 BGR 到 BGRA。
cv2.COLOR_RGB2RGBA:从 RGB 到 RGBA。
cv2.COLOR_BGRA2BGR:从 BGRA 到 BGR。
cv2.COLOR_RGBA2RGB:从 RGBA 到 RGB。
cv2.COLOR_BGR2GRAY:从 BGR 到灰度。
cv2.COLOR_RGB2GRAY:从 RGB 到灰度。
cv2.COLOR_GRAY2BGR:从灰度到 BGR。
cv2.COLOR_GRAY2RGB:从灰度到 RGB。
cv2.COLOR_BGR2RGB:从 BGR 到 RGB。
cv2.COLOR_RGB2BGR:从 RGB 到 BGR。

运行示例

import cv2
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

在这里插入图片描述
可以看到,用该函数转为灰度图的效果和cv2.imread()函数读取时设置为灰度图类似。

cv2.blur()

cv2.blur() 是 OpenCV 库中的一个函数,也被称为盒形滤波。它是一种简单平滑(滤波)技术,用于减小图像噪声和细节。该操作对于大多数图像是向下采样(分辨率降低)的。

函数原理

函数原型为:
cv2.blur(src, ksize[, dst[, anchor[, borderType]]])

参数详解:

src: 输入图像。
ksize: 滤波器的大小,这必须是奇数,如 (5,5)。
dst: 输出图像。
anchor: 锚点,定义了滤波器的参考点。默认值为 (-1,-1)。
borderType: 定义在滤波过程中使用的像素边界类型。默认值为 cv2.BORDER_DEFAULT。

运行示例


import cv2

# 读取图像
img = cv2.imread('115.jpg')

# 应用模糊操作
blurred = cv2.blur(img, (5,5))  # 使用5x5的滤波器

# 显示原始和模糊图像
cv2.imshow('Original Image', img)
cv2.imshow('Blurred Image', blurred)

cv2.waitKey(0)
cv2.destroyAllWindows()

运行输出效果:
在这里插入图片描述

可以看到,处理后的图像变得模糊,尤其是在数字细节处。

cv2.threshold()

cv2.threshold 是 OpenCV 库中的一个函数,主要用于对灰度图像进行阈值化处理,也就是将图像的像素值进行分类。这个函数的基本原理是将图像的每个像素值与设定的阈值进行比较,然后根据比较结果将像素值设置为0或255。

函数解析

函数原型:
cv2.threshold(src, thresh, maxval, type)

参数:
src: 输入图像,必须是8位或32位的单通道图像。
thresh: 阈值,是一个0到255之间的整数。
maxval: 当源图像的像素值大于(或小于)阈值时要赋予的值。如果最大值大于最大允许值(32767),则最大值被设置为最大允许值。
type: 阈值类型,有以下几种选择:cv2.THRESH_BINARY, cv2.THRESH_BINARY_INV, cv2.THRESH_TRUNC, cv2.THRESH_TOZERO, cv2.THRESH_TOZERO_INV。

阈值类型的解释:
cv2.THRESH_BINARY: 超过阈值的像素被赋予最大值,低于阈值的像素被赋予0。
cv2.THRESH_BINARY_INV: 低于阈值的像素被赋予最大值,超过阈值的像素被赋予0。
cv2.THRESH_TRUNC: 超过阈值的像素被赋予阈值。
cv2.THRESH_TOZERO: 低于阈值的像素被赋予0,超过阈值的像素被赋予最大值。
cv2.THRESH_TOZERO_INV: 超过阈值的像素被赋予0,低于阈值的像素被赋予最大值。

运行示例

import cv2

# 读取图像并转换为灰度图像
image = cv2.imread('115.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 使用cv2.threshold进行阈值化处理
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 显示原始图像和阈值化后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Thresholded Image', thresh)
cv2.imwrite('thread.jpg',thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()

上面的代码读取一个名为 ‘115.jpg’ 的图像文件,将其转换为灰度图像,并使用 cv2.threshold 函数进行阈值化处理。然后,它在窗口中显示原始图像和阈值化后的图像。运行输出效果如下图:

在这里插入图片描述

cv2.drawContours()

cv2.drawContours 是 OpenCV 库中的一个函数,用于在图像上绘制轮廓。它可以在二维或三维图像上绘制连续的轮廓。

函数解析

函数原型:

函数原型:
cv2.drawContours(image, contours, contourIndex, color[, thickness[, font[, fontScale[, label[, offset ]]]])

参数:
image: 要绘制轮廓的图像,可以是彩色图像或灰度图像。
contours: 轮廓的集合,可以是嵌套的列表或者单独的列表。每个轮廓是一个点数组,表示对象的边界。
contourIndex: 要绘制的轮廓的索引。如果为负数,则绘制所有轮廓。
color: 轮廓的颜色。可以是 RGB 三元组或十六进制颜色代码。
thickness: 轮廓的线宽。如果是负数(例如 -CV_FILLED),则填充轮廓内部。
font: 用于绘制标签的字体。
fontScale: 字体缩放因子。
label: 轮廓的标签。
offset: 绘制的偏移量。

运行示例

下面是一个简单的示例,展示如何使用 cv2.drawContours 函数在图像上绘制轮廓:

import cv2
import numpy as np

# 创建一个黑色背景图像
image = np.zeros((500, 500), dtype=np.uint8)

# 创建三个不同大小的圆形轮廓
contours = [np.array([[200, 200], [300, 200], [300, 300], [200, 300]]),
             np.array([[100, 100], [300, 100], [300, 300], [100, 300]]),
             np.array([[100, 200], [200, 250], [300, 250], [350, 200]]),
             ]

# 使用cv2.drawContours绘制所有轮廓,颜色为红色,线宽为2
cv2.drawContours(image, contours, -1, (255, 0, 0), 2)

# 显示绘制后的图像
cv2.imshow('Contours', image)
cv2.imwrite('Contours.jpg',image)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出的效果图:
在这里插入图片描述

cv2.findContours()

cv2.findContours 是 OpenCV 库中的一个函数,用于找到图像中的轮廓。这对于在图像处理中识别和标记对象非常有用。该函数可以处理二值图像,并在其中找到轮廓。

函数解析

函数原型:
cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])

函数详解:
image:源图像必须是灰度图像,可以是 8 位无符号整数或者 32 位浮点数。如果是彩色图像或者多通道图像,那么它会被自动转换为灰度图像。
mode:这是一个枚举(Enumeration)类型,用来选择轮廓检索模式。可以选择四种模式中的一种,比如 cv2.RETR_EXTERNAL(只检索最外层的轮廓),cv2.RETR_LIST(检索所有轮廓并将其保存为列表),cv2.RETR_CCOMP(检索所有轮廓并将其保存为两个层的树状结构),和 cv2.RETR_TREE(检索所有轮廓并将其保存为多层的树状结构)。
method:这也是一个枚举(Enumeration)类型,用来选择轮廓近似方法。可以选择三种方法中的一种,比如 cv2.CHAIN_APPROX_SIMPLE(压缩水平的、垂直的和斜的部分,也就是,函数通过压缩零水平、垂直和斜线交叉得到轮廓),cv2.CHAIN_APPROX_TC89_L1(使用 Ramer-Douglas-Peucker 算法,设置参数 epsilon 为 0.5)和 cv2.CHAIN_APPROX_TC89_KCOS(使用 Ramer-Douglas-Peucker 算法,设置参数 epsilon 为 0.1)。
contours: 这是一个列表,用来存储检测到的轮廓。轮廓是点的集合,每个轮廓都有一个“父”轮廓(如果有的话)。这个参数是返回的结果。
hierarchy: 这是一个可选的输出参数。它是一个包含多个轮廓层次信息的对象。如果指定了这个参数,那么函数会在这个对象中存储最外层轮廓和它的嵌套层次。
offset: 可选的参数,指定点相对于当前位置的偏移量。如果指定了这个参数,那么在计算轮廓时,会从图像的边界像素开始偏移。

运行示例

import cv2
import numpy as np

# 加载图像并转换为灰度图像
image = cv2.imread('image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 二值化图像
_, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 查找轮廓
contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 创建一个和原图大小一样的全黑图像,作为绘制轮廓的基础图像
drawn = np.zeros_like(image)

# 在新图像上绘制找到的轮廓
cv2.drawContours(drawn, contours, -1, (0, 255, 0), 3)

# 在窗口中显示原图和带有轮廓标记的图像
cv2.imshow('Original Image', image)
cv2.imshow('Drawn Image', drawn)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述
上面的代码读取一个名为 ‘115.jpg’ 的图像文件,将其转换为灰度图像,并查找其中的轮廓。最后在窗口中显示原图和带有轮廓标记的图像。

cv2.bitwise_and()

cv2.bitwise_and() 是 OpenCV 库中的一个函数,用于对输入图像进行按位与操作。它将每个像素与对应的掩码像素进行按位与运算,生成结果图像。

函数解析

cv2.bitwise_and(src1, src2, mask[, dst[, dtype]])
参数详解:

src1 和 src2:源图像,必须是相同大小和类型。
mask:掩码图像,必须是与源图像相同大小和类型的单通道图像。
dst:输出图像,必须是相同大小和类型,并且与源图像和掩码图像的通道数相同。
dtype:可选参数,指定输出图像的数据类型。默认为 -1,表示使用与输入图像相同的数据类型。

运行示例

import cv2
import numpy as np

# 加载图像和掩码
image1 = cv2.imread('115.jpg')
image2 = cv2.imread('115.jpg')
mask = cv2.imread('115.jpg')

# 将图像转换为灰度图像
image1_gray = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
image2_gray = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)
mask_gray = cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY)

# 对图像进行按位与操作(使用掩码)
result = cv2.bitwise_and(image1_gray, image2_gray, mask=mask_gray)

# 显示结果图像
cv2.imshow('Result', result)
cv2.imwrite('Result.jpg', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

这里为了省事,用的是同一幅图像,大家可以进行替换,使用不同图像进行。
在这里插入图片描述

cv2.inRange()

cv2.inRange是OpenCV库中的一个函数,用于从指定的颜色范围中过滤图像的像素。它通常用于颜色过滤或对象识别。

函数解析

函数原型:
cv2.inRange(src, lowerbord, upperbord, mask)

参数:
src: 输入的源图像,必须是8位或32位的单通道图像。
lowerbord: 颜色范围的下界,表示为包含三个元素的元组,分别对应红色、绿色和蓝色的范围(0-255)。
upperbord: 颜色范围的上界,同样表示为包含三个元素的元组,分别对应红色、绿色和蓝色的范围(0-255)。
mask: 输出图像的位深度,例如对于8位图像,值为CV_8U。
函数原型:

运行示例

以下是一个使用cv2.inRange函数的示例,该示例读取一张图像,然后仅显示图像中蓝色和绿色像素位于特定范围内的部分:

import cv2
import numpy as np

# 加载图像并转换为灰度图像
image = cv2.imread('115.jpg')
#gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 定义颜色范围的下界和上界
lower_range = np.array([110, 50, 50]) # 对于蓝绿色像素,下界为(110,50,50),上界为(130,255,255)
upper_range = np.array([130, 255, 255])

# 使用cv2.inRange过滤图像中的像素
mask = cv2.inRange(image, lower_range, upper_range)

# 将原图和过滤后的图像进行按位与操作,得到最终的输出图像
res = cv2.bitwise_and(image, image, mask=mask)

# 显示原图和输出图像
cv2.imshow('Original Image', image)
cv2.imshow('Filtered Image', res)
cv2.imwrite('Filtered Image.jpg', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述
在这个示例中,我们首先加载一张图像。然后我们定义了一个颜色范围的下界和上界。接着我们使用cv2.inRange函数过滤图像中的像素,将过滤后的像素保存在一个掩码中。最后我们将原图和过滤后的图像进行按位与操作,得到最终的输出图像。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1276084.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

跨模态图像翻译:使用具有感知监督的多生成网络合成MR脑图像的CT图像

Cross-modality image translation: CT image synthesis of MR brain images using multi generative network with perceptual supervision 跨模态图像翻译:使用具有感知监督的多生成网络合成MR脑图像的CT图像背景贡献实验方法损失函数Thinking 跨模态图像翻译&…

使用 NRF24L01 无线收发模块进行远程控制

NRF24L01 是一款基于 2.4GHz 射频通信的低功耗无线收发模块,具有高性能和稳定性,适用于远程控制和数据传输应用。本文将介绍如何使用 NRF24L01 模块进行远程控制,包括硬件的连接和配置,以及相应的代码示例。 一、引言 NRF24L01 是…

es6之class类(未完成)

es6之class类 一、什么是类二、类的基本用法1.定义类2.constructor() 方法3.静态方法(属性)4.私有方法(属性) 三、继承 一、什么是类 类是用于创建对象的模板,类只是让对象原型的写法更加清晰、更像面向对象编程的语法。 class Pe…

matlab 多目标粒子群优化算法MOPSO

1、内容简介 略 21-可以交流、咨询、答疑 多目标、粒子群 2、内容说明 多目标粒子群优化算法MOPSO 3、仿真分析 略 %% Problem Definition TestProblem3; % Set to 1, 2, or 3 switch TestProblem case 1 CostFunction(x) MyCost1(x); nVar5; …

REST-Assured--JAVA REST服务自动化测试的Swiss Army Knife

什么是REST-Assured REST Assured是一套基于 Java 语言实现的开源 REST API 测试框架 Testing and validation of REST services in Java is harder than in dynamic languages such as Ruby and Groovy. REST Assured brings the simplicity of using these languages into t…

TCP简介及特性

1. TCP协议简介 TCP是Transmission Control Protocol的简称,中文名是传输控制协议。它是一种面向连接的、可靠的、基于IP的传输层协议。两个TCP应用之间在传输数据的之前必须建立一个TCP连接,TCP采用数据流的形式在网络中传输数据。TCP为了保证报文传输的…

网站更换IP的四大注意事项

1.对网站当中的数据进行备份 网站更换IP时可以将页面的数据库文件和站点文件通过下载工具在本地完成备份。 2.更换解析域名 从站点域名管理后台当中更换域名地址,改为新的IP地址。 3.确保IP安全 在用户更换IP前一定要确定IP是否安全,一旦IP存在不良…

如何选择适合长期投资的股票板块?

大家在学习炒股的过程中肯定没少听“板块”这个词,新手可能一脸懵逼,板块到底是啥意思?为什么会有这么多板块? 一、什么是股票板块?常见的板块分类有哪些? 板块理解起来其实很简单,它就是一种分…

java开发实战 基于Resuful风格开发接口, IocDi和nginx,以及三层架构思想,分层解耦,并使用Apifox对接口数据进行测试。

开发规范: 前后端分离: 根据需求文档开发 Resultful风格: REST(REpresentational State Transfer),表述性状态转换,它是一种软件架构风格。 POST(insert) 负责新增的操作 http://localhost:8080…

TZOJ 1386 十转换转R进制

答案&#xff1a; #include<stdio.h> char fun(int n) {if (n > 0 && n < 10) //如果是小于10进制的return n 48; //ASCII值48else if (n > 10 && n < 16) //如果是大于10进制小于16进制的return n 55; //ASCII值55elseretur…

JIRA 基本使用

该页面可以&#xff1a; 查看个人基本信息以及归属的邮件组修改常用参数配置查看指给自己的 Open 问题查看自己最近的活动记录等 权限管理 Project 权限管理 JIRA 项目有三种通用权限方案&#xff1a; 公开权限方案&#xff08;默认禁止使用此方案&#xff09;&#xff1a…

Google Chrome 下载 (离线版)

1 访问网址 Google Chrome 网络浏览器 2 点击 下载Chrome 3 直接运行 ChromeStandaloneSetup64.exe 其他&#xff1a; ####################### 谷歌浏览器 (Google Chrome) 最新版离线安装包下载 https://www.iplaysoft.com/tools/chrome/#google_vignette Google Chrome …

【二叉树】常见题目解析(2)

题目1&#xff1a;104. 二叉树的最大深度 - 力扣&#xff08;LeetCode&#xff09; 题目1描述&#xff1a; 题目1分析及解决&#xff1a; &#xff08;1&#xff09;base case&#xff1a;当前节点为null时&#xff0c;以当前节点为根节点的树最大深度是0。 &#xff08;2&…

深入理解前端路由:构建现代 Web 应用的基石(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

skywalking 9.0.0开启自监控和配置集群

一、skywalking介绍 SkyWalking是有国内开源爱好者吴晟开源并提交到Apache孵化器的开源项目&#xff0c;2017年12月SkyWalking成为Apache国内首个个人孵化项目&#xff0c;2019年4月17日SkyWalking从Apache基金会的孵化器毕业成为顶级项目&#xff0c;目前SkyWalking支持Java、…

如何快速看懂市场行情?

一、看大盘指数 咱们平时所说的大盘其实指的就是上证指数&#xff0c;它是整个市场的晴雨表。大盘涨了&#xff0c;个股跟着上涨的概率就大&#xff0c;大盘跌了&#xff0c;个股被拖累下跌的概率也大。所以&#xff0c;要想在股市中尝到甜头&#xff0c;大盘分析是少不了滴&am…

git的基本命令操作超详细解析教程

Git基础教学 1、初始化配置2、初始化仓库3、工作区域和文件状态4、添加和提交文件5、git reset 回退版本6、git diff查看差异7、删除文件git rm8、.gitignore9、本地文件提交到远程仓库10、分支基础 Git&#xff1a;一个开源的分布式版本控制系统&#xff0c;它可以在本地和远程…

网络安全应急响应-Server2228(环境+解析)

网络安全应急响应 任务环境说明: 服务器场景:Server2228(开放链接)用户名:root,密码:p@ssw0rd123

2023第十二届“认证杯”数学中国数学建模国际赛赛题A完整解析

A题完整题解 写在前面假设数据预处理 问题一1 基于自适应ARIMA-BP神经网络模型的影响因素预测1.1 ARIMA模型的建立1.2 BP神经网络模型的建立1.3 基于GABP神经网络的预测模型构建1.4 自适应混合ARIMA-BP神经网络模型的建立1.5 模型求解 代码Q1_1.mQ1_2.m 完整代码与论文获取 写在…

Android 应用程序无响应定位ANR原因

废话不多说&#xff0c;直接上方案&#xff1a; 第一步&#xff1a; 执行adb命令 adb bugreport /Users/mac/Desktop/anr 解压后FS/data/anr下就会有相关anr文件 /Users/mac/Desktop/anr 是电脑存储文件的路径&#xff0c;可以随便定义&#xff0c;这个没有影响。我的电脑是…