OpenCV入门9——目标识别(车辆统计)

news2024/9/30 9:22:57

文章目录

  • 图像轮廓
  • 查找轮廓
  • 绘制轮廓
  • 轮廓的面积与周长
  • 多边形逼近与凸包
  • 外接矩形
  • 项目总览【车辆统计】
  • 视频加载【车辆统计】
  • 去背景【车辆统计】
  • 形态学处理【车辆统计】
  • 逻辑处理【车辆统计】
  • 显示信息【车辆统计】

图像轮廓

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查找轮廓

# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = cv2.imread('./contours1.jpeg')
# print(img.shape)

# 转变为单通道
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 二值化
ret, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
# print(gray.shape)

cv2.imshow('img', img)
cv2.imshow('binary', binary)

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

print(contours)

key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述

绘制轮廓

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = cv2.imread('./contours1.jpeg')
# print(img.shape)

# 转变为单通道
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 二值化
ret, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
# print(gray.shape)

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

print(contours)

# 绘制轮廓
cv2.drawContours(img, contours, -1, (0, 255, 0), 1)

cv2.imshow('img', img)
cv2.imshow('binary', binary)

key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()

在这里插入图片描述
详细可参考官方资料

# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = cv2.imread('./contours1.jpeg')
# print(img.shape)

# 转变为单通道
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 二值化
ret, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
# print(gray.shape)

# 轮廓查找
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

print(contours)

# 绘制轮廓
cv2.drawContours(img, contours, -1, (0, 255, 0), 1)

cv2.imshow('img', img)
cv2.imshow('binary', binary)

key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

轮廓的面积与周长

在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = cv2.imread('./contours1.jpeg')
# print(img.shape)

# 转变为单通道
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 二值化
ret, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
# print(gray.shape)

# 轮廓查找
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

print(contours)

# 绘制轮廓
cv2.drawContours(img, contours, 0, (0, 255, 0), 1)
# 计算面积
area = cv2.contourArea(contours[0])
print("area=%d"%(area))

# 计算周长
len = cv2.arcLength(contours[0], True)
print("len=%d"%(len))

# cv2.imshow('img', img)
# cv2.imshow('binary', binary)

# key = cv2.waitKey(0) & 0xff
# if key == ord('q'):
#     cv2.destroyAllWindows()

在这里插入图片描述

多边形逼近与凸包

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as np

img = cv2.imread('./hand.png')
# print(img.shape)

# 转变为单通道
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 二值化
ret, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
# print(gray.shape)

# 轮廓查找
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

print(len(contours))

# 绘制轮廓
cv2.drawContours(img, contours, 0, (0, 255, 0), 1)
# 计算面积
# area = cv2.contourArea(contours[0])
# print("area=%d"%(area))

# 计算周长
# len = cv2.arcLength(contours[0], True)
# print("len=%d"%(len))

cv2.imshow('img', img)
# cv2.imshow('binary', binary)

key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as np

def drawShape(src, points):
    i = 0
    while i < len(points):
        if(i == len(points) - 1):
            x, y = points[i][0]
            x1, y1 = points[0][0]
            cv2.line(src, (x, y), (x1, y1), (0, 255, 0), 2)
        else:
            x, y = points[i][0]
            x1, y1 = points[i + 1][0]
            cv2.line(src, (x, y), (x1, y1), (0, 255, 0), 2)
        i = i + 1

img = cv2.imread('./hand.png')
# print(img.shape)

# 转变为单通道
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 二值化
ret, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
# print(gray.shape)

# 轮廓查找
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

# print(len(contours))

# 绘制轮廓
# cv2.drawContours(img, contours, 0, (0, 255, 0), 1)
# 计算面积
# area = cv2.contourArea(contours[0])
# print("area=%d"%(area))

# 计算周长
# len = cv2.arcLength(contours[0], True)
# print("len=%d"%(len))

e = 5
approx = cv2.approxPolyDP(contours[0], e, True)
drawShape(img, approx)

hull = cv2.convexHull(contours[0])
drawShape(img, hull)

cv2.imshow('img', img)
# cv2.imshow('binary', binary)

key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()

在这里插入图片描述

外接矩形

在这里插入图片描述
红框就是最小外接矩形,绿框就是最大外接矩形。

最小外接矩形可以看图形有没有旋转
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
详情见参考文档
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as np

def drawShape(src, points):
    i = 0
    while i < len(points):
        if(i == len(points) - 1):
            x, y = points[i][0]
            x1, y1 = points[0][0]
            cv2.line(src, (x, y), (x1, y1), (0, 255, 0), 2)
        else:
            x, y = points[i][0]
            x1, y1 = points[i + 1][0]
            cv2.line(src, (x, y), (x1, y1), (0, 255, 0), 2)
        i = i + 1

img = cv2.imread('./hello.jpeg')
# print(img.shape)

# 转变为单通道
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 二值化
ret, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
# print(gray.shape)

# 轮廓查找
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

# print(len(contours))

# 绘制轮廓
# cv2.drawContours(img, contours, 1, (0, 255, 0), 1)
# 计算面积
# area = cv2.contourArea(contours[0])
# print("area=%d"%(area))

# 计算周长
# len = cv2.arcLength(contours[0], True)
# print("len=%d"%(len))

# e = 5
# 多边形逼近
# approx = cv2.approxPolyDP(contours[0], e, True)
# drawShape(img, approx)

# 凸包
# hull = cv2.convexHull(contours[0])
# drawShape(img, hull)

r = cv2.minAreaRect(contours[1])
box = cv2.boxPoints(r)
box = np.int0(box)
cv2.drawContours(img, [box], 0, (0, 255, 0), 2)

x, y, w, h = cv2.boundingRect(contours[1])
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)

cv2.imshow('img', img)
# cv2.imshow('binary', binary)

key = cv2.waitKey(0) & 0xff
if key == ord('q'):
    cv2.destroyAllWindows()

在这里插入图片描述

项目总览【车辆统计】

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

视频加载【车辆统计】

# -*- coding: utf-8 -*-
import cv2
import numpy as np

cap = cv2.VideoCapture('./video.mp4')

while True:
    ret, frame = cap.read()

    if(ret == True):
        cv2.imshow('video', frame)

    key = cv2.waitKey(1)
    if(key == 27):
        break

cap.release()
cv2.destroyAllWindows()

在这里插入图片描述

去背景【车辆统计】

如果视频是25fps,即每秒25帧,即1000ms过25帧,那么200ms就走5帧(25/1000*200=5)
在这里插入图片描述
在这里插入图片描述
运动的物体为前景,静止的物体就是背景

详细可以参考官方文档
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as np

cap = cv2.VideoCapture('./video.mp4')

bgsubmog = cv2.createBackgroundSubtractorMOG2()
while True:
    ret, frame = cap.read()

    if(ret == True):
        mask = bgsubmog.apply(frame)
        cv2.imshow('video', mask)

    key = cv2.waitKey(1)
    if(key == 27):
        break

cap.release()
cv2.destroyAllWindows()

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as np

cap = cv2.VideoCapture('./video.mp4')

bgsubmog = cv2.createBackgroundSubtractorMOG2()
tst = cv2.createBackgroundSubtractorMOG2()

while True:
    ret, frame = cap.read()

    if(ret == True):
        # 灰度图
        cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # 去噪(高斯)
        blur = cv2.GaussianBlur(frame, (3, 3), 5)
        # 去背景
        mask = bgsubmog.apply(blur)
        t = tst.apply(frame)

        cv2.imshow('video', mask)
        cv2.imshow('t', t)

    key = cv2.waitKey(40)
    if(key == 27):
        break

cap.release()
cv2.destroyAllWindows()

在这里插入图片描述

形态学处理【车辆统计】

# -*- coding: utf-8 -*-
import cv2
import numpy as np

cap = cv2.VideoCapture('./video.mp4')

bgsubmog = cv2.createBackgroundSubtractorMOG2()
# tst = cv2.createBackgroundSubtractorMOG2()

# 形态学kernel
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
kernel2 = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))

while True:
    ret, frame = cap.read()

    if(ret == True):
        # 灰度图
        cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # 去噪(高斯)
        blur = cv2.GaussianBlur(frame, (3, 3), 1)
        # 去背景
        mask = bgsubmog.apply(blur)
        # t = tst.apply(frame)

        # 腐蚀,去掉图中小斑块
        erode = cv2.erode(mask, kernel, iterations=1)

        # 膨胀,还原放大
        dilate = cv2.dilate(erode, kernel2, iterations=5)

        # 闭操作,去掉物体内部噪声
        close = cv2.morphologyEx(dilate, cv2.MORPH_CLOSE, kernel)
        close = cv2.morphologyEx(close, cv2.MORPH_CLOSE, kernel)

        contours, hierarchy = cv2.findContours(close, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

        for i, c in enumerate(contours):
            x, y, w, h = cv2.boundingRect(c)
            cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

        cv2.imshow('video', frame)
        # cv2.imshow('erode', close)

    key = cv2.waitKey(40)
    if(key == 27):
        break

cap.release()
cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述

逻辑处理【车辆统计】

# -*- coding: utf-8 -*-
import cv2
import numpy as np

min_w = 50
min_h = 50
max_w = 800
max_h = 800

# 检测线的高度
line_high = 480

# 存放有效车辆数组
cars = []

# 统计车的数量
carnums = 0

# 线的偏移
offset = 10

# 求中心点
def center(x, y, w, h):
    x1 = int(w / 2)
    y1 = int(h / 2)
    cx = x + x1
    cy = y + y1
    return cx, cy

cap = cv2.VideoCapture('./video.mp4')

bgsubmog = cv2.createBackgroundSubtractorMOG2()
# tst = cv2.createBackgroundSubtractorMOG2()

# 形态学kernel
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
kernel2 = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))

while True:
    ret, frame = cap.read()

    if(ret == True):
        # print(frame.shape)
        # (584, 1280, 3)
        # 灰度图
        cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # 去噪(高斯)
        blur = cv2.GaussianBlur(frame, (3, 3), 1)
        # 去背景
        mask = bgsubmog.apply(blur)
        # t = tst.apply(frame)

        # 腐蚀,去掉图中小斑块
        erode = cv2.erode(mask, kernel, iterations=1)

        # 膨胀,还原放大
        dilate = cv2.dilate(erode, kernel2, iterations=3)

        # 闭操作,去掉物体内部噪声
        close = cv2.morphologyEx(dilate, cv2.MORPH_CLOSE, kernel)
        close = cv2.morphologyEx(close, cv2.MORPH_CLOSE, kernel)

        contours, hierarchy = cv2.findContours(close, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

        cv2.line(frame, (100, line_high), (1100, line_high), (255, 255, 0), 2)

        for i, c in enumerate(contours):
            x, y, w, h = cv2.boundingRect(c)

            # 对车辆的宽高进行判断,以验证是否是有效车辆
            isValid = (x >= min_w) and (h >= min_h) and (x <= max_w) and (h <= max_h)
            if(not isValid):
                continue

            # 有效的车
            cpoint = center(x, y, w, h)
            cars.append(cpoint)
            cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

            for xc, yc in cars:
                if(yc > line_high - offset and yc < line_high + offset):
                    carnums += 1
                    cars.remove((xc, yc))
                    print(carnums)

        cv2.imshow('video', frame)
        # cv2.imshow('erode', close)

    key = cv2.waitKey(40)
    if(key == 27):
        break

cap.release()
cv2.destroyAllWindows()

在这里插入图片描述

显示信息【车辆统计】

# -*- coding: utf-8 -*-
import cv2
import numpy as np

min_w = 50
min_h = 50
max_w = 800
max_h = 800

# 检测线的高度
line_high = 480

# 存放有效车辆数组
cars = []

# 统计车的数量
carnums = 0

# 线的偏移
offset = 10

# 求中心点
def center(x, y, w, h):
    x1 = int(w / 2)
    y1 = int(h / 2)
    cx = x + x1
    cy = y + y1
    return cx, cy

cap = cv2.VideoCapture('./video.mp4')

bgsubmog = cv2.createBackgroundSubtractorMOG2()
# tst = cv2.createBackgroundSubtractorMOG2()

# 形态学kernel
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
kernel2 = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))

while True:
    ret, frame = cap.read()

    if(ret == True):
        # print(frame.shape)
        # (584, 1280, 3)
        # 灰度图
        cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # 去噪(高斯)
        blur = cv2.GaussianBlur(frame, (3, 3), 1)
        # 去背景
        mask = bgsubmog.apply(blur)
        # t = tst.apply(frame)

        # 腐蚀,去掉图中小斑块
        erode = cv2.erode(mask, kernel, iterations=1)

        # 膨胀,还原放大
        dilate = cv2.dilate(erode, kernel2, iterations=3)

        # 闭操作,去掉物体内部噪声
        close = cv2.morphologyEx(dilate, cv2.MORPH_CLOSE, kernel)
        close = cv2.morphologyEx(close, cv2.MORPH_CLOSE, kernel)

        contours, hierarchy = cv2.findContours(close, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

        # 画一条检测线
        cv2.line(frame, (100, line_high), (1100, line_high), (255, 255, 0), 2)

        for i, c in enumerate(contours):
            x, y, w, h = cv2.boundingRect(c)

            # 对车辆的宽高进行判断,以验证是否是有效车辆
            isValid = (x >= min_w) and (h >= min_h) and (x <= max_w) and (h <= max_h)
            if(not isValid):
                continue

            # 有效的车
            cpoint = center(x, y, w, h)
            cars.append(cpoint)
            cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
            cv2.circle(frame, (cpoint), 5, (0, 0, 255), -1)

            for xc, yc in cars:
                if(yc > line_high - offset and yc < line_high + offset):
                    carnums += 1
                    cars.remove((xc, yc))
                    print(carnums)
        cv2.putText(frame, "Cars Count:" + str(carnums), (500, 60), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 255, 0), 3)
        cv2.imshow('video', frame)
        # cv2.imshow('erode', close)

    key = cv2.waitKey(40)
    if(key == 27):
        break

cap.release()
cv2.destroyAllWindows()

在这里插入图片描述
通过实践可以发现传统的目标检测缺点很多,比方说可能重复计数…所以之后我们需要结合深度学习来提高目标检测的精度

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

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

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

相关文章

位运算技巧及leetcode相关例题Java实现

目录 一、异或运算符的运用&&leetcode136 异或运算符 a ^ b ^ b a leetcode136 二、n & (n - 1)&&leetcode133 n & (n - 1):消除n最右边的一个1 leetcode133/剑指offer15 三、m的n次方&#xff08;n是正整数&#xff09; 常规写法 二进制的快…

Linux(5):Linux 磁盘与文件管理系统

认识 Linux 文件系统 磁盘的物理组成&#xff1a; 1.圆形的磁盘盘(主要记录数据的部分); 2.机械手臂&#xff0c;与在机械手臂上的磁盘读取头(可擦写磁盘盘上的数据)&#xff1b; 3.主轴马达&#xff0c;可以转动磁盘盘&#xff0c;让机械手臂的读取头在磁盘盘上读写数据。 4…

基于Python+TensorFlow+Django的交通标志识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 随着交通网络的不断扩展和智能交通系统的发展&#xff0c;交通标志的自动识别变得愈发重要。本项目旨在利用Python编…

人工智能基础_机器学习046_OVR模型多分类器的使用_逻辑回归OVR建模与概率预测---人工智能工作笔记0086

首先我们来看一下什么是OVR分类.我们知道sigmoid函数可以用来进行二分类,那么多分类怎么实现呢?其中一个方法就是使用OVR进行把多分类转换成二分类进行计算. OVR,全称One-vs-Rest,是一种将多分类问题转化为多个二分类子问题的策略。在这种策略中,多分类问题被分解为若干个二…

〖大前端 - 基础入门三大核心之JS篇㊵〗- DOM事件监听及onxxx的使用

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;不渴望力量的哈士奇(哈哥)&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…

【Python】给出n个数,找出这n个数的最大值,最小值,和。

问题描述 给出n个数&#xff0c;找出这n个数的最大值&#xff0c;最小值&#xff0c;和。 样例输入 5 1 3 -2 4 5 Data 样例输出 5 -2 11 n int(input()) # 从用户输入中读取一个整数&#xff0c;将其赋给变量n# 从用户输入中读取一行字符串&#xff0c;使用空格分割字符串&a…

vite vue3配置axios

准备 参考 安装axios yarn add axios中文官网 src下新建request文件夹&#xff0c;该文件下新建index.ts import axios from axios; import { ElMessage } from element-plus;// const errorCodeType function (code: number): string { // let errMessage: string 未知…

echarts 树形图

用echarts 实现树形图&#xff0c;图节点为矩形&#xff0c;线为直线&#xff0c;节点可以点击并实现跳转页面。 <!DOCTYPE html> <html> <body> <div> <div id"chart" style"width: 80%;height: 700px;"></div> <…

算法训练 第八周

一、最长公共前缀 1.水平扫描 首先将第一个字符串设为最长公共前缀&#xff08;prefix&#xff09;。遍历字符串数组中的每个字符串&#xff0c;滚动更新遍历到的字符串和记录的公共前缀的公共前缀。具体代码如下&#xff1a; class Solution {public String longestCommonPr…

听GPT 讲Rust源代码--src/librustdoc

题图来自 Why is building a UI in Rust so hard? File: rust/src/librustdoc/core.rs 在Rust中&#xff0c;rust/src/librustdoc/core.rs文件的作用是实现了Rustdoc库的核心功能和数据结构。Rustdoc是一个用于生成Rust文档的工具&#xff0c;它分析Rust源代码&#xff0c;并生…

小程序制作(超详解!!!)第十六节 小程序的基本架构

1.题目描述 创建一个包含:首页、教学、科研、资讯和关于我们5个标签的小程序&#xff0c;每个标签都有对应的页面、图标和标签文字&#xff0c;点击某个标签将切换到对应的页面&#xff0c;同时该标签的图标和文字颜色都会发生变化页面的标题也发生相应的变化&#xff0c;而其…

Python绘图库Plotly用超简单代码实现丰富的数据可视化图表

文章目录 前言Plotly 概述散点图时间序列分析 高级绘图功能散点图矩阵关系热图自定义主题 在 Plotly 图表工坊&#xff08;Plotly Chart Studio&#xff09;里编辑技术交流关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Pyt…

有依次对应关系的数组X、Y、Z,如何排序其中一个X数组,使得另外的数组还与排序完成后的数组相对应(C语言实现)

1. 目的 有依次对应关系的数组X、Y、Z&#xff0c;排序其中一个X数组&#xff0c;使得另外的数组还与排序完成后的数组相对应&#xff0c;并打印出排序完成后的X、Y、Z数组。 2. 具体实现 以下面的这个对应关系为例&#xff0c;进行相应编程实现。 X [3.7,7.7,-6.6,1.5,-4.5…

时间序列中的6大类10种异常值处理方法(从根源上提高预测精度)

一、本文介绍 本文介绍的内容是在时间序列中异常值处理的方法&#xff0c;当我进行时间序列分析建模收集数据的过程中&#xff0c;往往都存在着一些特数据情况导致数据中存在着一些异常值&#xff0c;这些异常值往往会导致模型识别到不正常的模式从而无法准确的预测&#xff0…

【代码随想录】刷题笔记Day33

前言 Day33虽说是一个月&#xff0c;但是从第一篇开始实际上已经过了8个月了&#xff0c;得抓紧啊 46. 全排列 - 力扣&#xff08;LeetCode&#xff09; 前面组合就强调过差别了&#xff0c;这道题是排序&#xff0c;因此每次要从头到尾扫&#xff0c;结合used数组 class So…

NUCLEO-L552ZE SWD外部接口定义

如果使用ST-LINK调试器对外部MCU编程需要将CN4上的跳线拔下。

SQL DELETE 语句:删除表中记录的语法和示例,以及 SQL SELECT TOP、LIMIT、FETCH FIRST 或 ROWNUM 子句的使用

SQL DELETE 语句 SQL DELETE 语句用于删除表中的现有记录。 DELETE 语法 DELETE FROM 表名 WHERE 条件;注意&#xff1a;在删除表中的记录时要小心&#xff01;请注意DELETE语句中的WHERE子句。WHERE子句指定应删除哪些记录。如果省略WHERE子句&#xff0c;将会删除表中的所…

为什么云游戏被认为是行业的未来趋势?

5G 时代的到来&#xff0c;游戏行业也正在经历着一场革命性的变革。云游戏&#xff0c;这个看似神秘的新兴领域&#xff0c;正在逐渐成为行业的未来趋势。 一、云游戏的优势 摆脱硬件束缚 在传统游戏中&#xff0c;玩家需要购买昂贵的游戏主机或电脑&#xff0c;才能享受高质…

SpringBoot——》配置logback日志文件

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

详解Python Tornado框架写一个Web应用全过程

Tornado是什么 之前在看Jupyter组件的源码的时候&#xff0c;发现了tornado这个web框架。 不仅仅做一个web框架&#xff0c; 通过使用非阻塞网络I/O&#xff0c;Tornado可以扩展到数万个开放连接。 这样非常适合 long polling &#xff0c; WebSockets 以及其他需要与每个用户…