13.插入排序
概念插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
算法过程
时间复杂度
最优时间复杂度:O(n) (升序排列,序列已经处于升序状态)
最坏时间复杂度:O(n^2)
稳定性:稳定
代码实现1234567891011121314151617def insert_sort(alist): """ :param alist: :return: alist.sort 插入排序首先需要认定一个基准,一般认为是第一个 以alist = [10,1,3,2,5,7,6,4]为例,首先是1和10比较,需要交换,此时i=0,递减变为-1退出while循环 列表变为alist = [1,10,3,2,5,7,6,4],首先是3和10比较,需要交换,再和1比较,不需要交换,直到i递减到比0小,退出循环 列表的每一个元素 ...
12.图像融合
图像融合不是简单的加法,相当于拿图片做了线性运算new_img = img1w1+img2w2+biascv2.addWeighted(src1,alpha,src2,beta,gamma)
src1:第一张图片
alpha:第一张图片的权重
src2:第二张图片
beta:第二张图片的权重,没有要求两个权重加起来是1,但1的效果要好一点
gamma:偏差b,可以理解为调节明亮度
同样的,在进行融合的时候,也要保证两张图片的尺寸一样
123456789101112131415161718192021#!/usr/bin/env python# -*- coding: UTF-8 -*-"""@Project :Opencv学习 @File :图像融合.py@IDE :PyCharm @Author :咋@Date :2023/1/12 20:23 """import cv2image = cv2.imread("image.jpg")test = cv2.imread ...
12.选择排序
概念选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下:
首先在未排序序列中找到最小(大)元素,存放在排序序列的起始位置,即第一个位置。
然后再将剩余未排序元素中继续寻找最小(最大)元素,放在第二个位置。
以此类推,直到所有元素均排序完毕。
总结:先找出最大(最小)的元素,放在第一位或者最后一位。以找出最大的放在第一位为例,先找出最大的放在第一位,再在剩下的元素找出最大的元素,放在第二位,依次进行,直到遍历到最后一个元素,排序结束。选择选的就是最大或者最小的的,相当于挑高个,挑完最高的,再挑次高的,直到结束。
排序过程
时间复杂度最优时间复杂度:O(n^2)最坏时间复杂度:O(n^2)稳定性:不稳定(考虑升序每次选择最大的情况)
代码实现1234567891011121314151617181920def selection_sort(alist): """ :param alist: :return: alist 思想就是不断找出最小的放在最前面 以alist = [10,1,3,2, ...
11.图像运算之加减乘除
加法操作cv2.add(img1,img2)
img2和img2的尺寸要一样
new_img = img[0:360,0:499] # 360,490是较小的图片的长宽
返回的是一个图片矩阵
对应位置相加超过255的统一变为255
图片还可以与数字直接进行加法运算,相当于np.array与数字直接进行运算
eg : img += 100
对应位置相加超过255的,对256取模,%256
减法操作cv2.subtract()
与加法操作相似
对应像素相减小于0,统一变为0
乘法操作cv2.multiply()
与加法操作相似
相乘大于255,自动变为255
除法操作cv2.divide()
与减法操作相似
不够除的为01234567891011121314151617181920212223242526272829303132#!/usr/bin/env python# -*- coding: UTF-8 -*-"""@Project :Opencv学习 @File :图像运算之加减乘除.py@IDE ...
11.冒泡排序
概念冒泡排序(Bubble Sort)是一种简单的排序算法。它重复的遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作室重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小(越大)的元素会慢慢“浮到”数列的顶端。
运作过程
比较相邻的元素,如果第一个比第二个大(升序),就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完之后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
算法分析时间复杂度:
最优时间复杂度:O(n) 表示遍历一次发现没有任何可以交换的元素,排序结束。)
最坏时间复杂度:O(n^2)每一个都要交换。
稳定性:稳定
代码实现12345678910111213def bubble_sort_1(alist): """ 两个for循环嵌套 以 alist = [1,3,2,5,7,6,4]为例 第一次需要遍历到索引 ...
10.绘制文本及中文文本
绘制文本cv2.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])
img:要绘制文本的对象
text:添加的文本信息
org:文本在图片中左下角的坐标
fontFace:字体
FONT_HERSHEY_COMPLEX
FONT_HERSHEY_COMPLEX_SMALL
FONT_HERSHEY_DUPLEX
FONT_HERSHEY_PLAIN
FONT_HERSHEY_SCRIPT_COMPLEX
FONT_HERSHEY_SCRIPT_SIMPLEX
FONT_HERSHEY_SIMPLEX
FONT_HERSHEY_TRIPLEX
FONT_ITALIC
fontScale:字体大小
color:颜色123456789101112131415161718#!/usr/bin/env python# -*- coding: UTF-8 -*-"""@Project :Opencv学习 @File ...