From bcffe3bdcf91e7d9239694006b72d33f6a55a517 Mon Sep 17 00:00:00 2001 From: daacheng <1193685537@qq.com> Date: Fri, 30 Apr 2021 18:30:18 +0800 Subject: [PATCH 1/6] opencv opencv --- python_advance/main.md | 1 + .../opencv-python\345\237\272\347\241\200.md" | 95 +++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 "python_advance/opencv-python\345\237\272\347\241\200.md" diff --git a/python_advance/main.md b/python_advance/main.md index 5e6883c..e07cf25 100644 --- a/python_advance/main.md +++ b/python_advance/main.md @@ -22,3 +22,4 @@ * [Python垃圾回收机制](Python垃圾回收机制.md) * [Python上下文管理器与with语句](Python上下文管理器与with语句.md) * [Python实现单例模式](Python实现单例模式.md) +* [Python opencv基础](opencv-python基础.md) diff --git "a/python_advance/opencv-python\345\237\272\347\241\200.md" "b/python_advance/opencv-python\345\237\272\347\241\200.md" new file mode 100644 index 0000000..02608bd --- /dev/null +++ "b/python_advance/opencv-python\345\237\272\347\241\200.md" @@ -0,0 +1,95 @@ +# opencv-python基础 +* pip install opencv-python + +## 1.图像的读取、显示、保存 +```python +import cv2 + +if __name__ == '__main__': + + # 1:加载彩色图像 0:灰度模式 -1:加载图像,包括alpha通道 + img = cv2.imread("test.jpg", -1) + cv2.namedWindow('window1', cv2.WINDOW_NORMAL) # 创建一个默认大小的窗口 + cv2.imshow('window1', img) # 窗口显示图像 + key_event = cv2.waitKey(0) # 键盘绑定,点击键盘程序继续执行 + if key_event == 27: + # ESC按键 + cv2.destroyAllWindows() # 关闭所有窗口 + elif key_event == ord('s'): + # 按键s + cv2.imwrite('new_test.jpg', img) # 写图片 + cv2.destroyAllWindows() +``` + +## 2.绘制直线、圆、矩形、多边形,文本 +```python +import cv2 +import numpy as np + + +if __name__ == '__main__': + # 创建一个高512,宽512的黑色图片 + img = np.zeros((512, 512, 3), np.uint8) + # 从左上角到右下角画一条直线,厚度为5像素,蓝色(255, 0, 0) + cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5) + + # 画矩形,指定矩形的左上角和右下角,绿色(0, 255, 0) + cv2.rectangle(img, (300, 0), (500, 100), (0, 255, 0), 3) + + # 画一个圆,指定圆心和半径,红色(0, 0, 255) + cv2.circle(img, (300, 100), 150, (0, 0, 255), 3) + + # 画一个椭圆 + cv2.ellipse(img, (300, 100), (100, 50), 0, 0, 180, 255, -1) + + # 画多边形,首先需要顶点的坐标,将这些点组成形状为rowsx1x2的数组,其中rows是顶点数,并且其类型应为int32。 + pts = np.array([[10, 10], [100, 10], [100, 150], [10, 200]], np.int32) + pts = pts.reshape((-1, 1, 2)) + # True是闭合的折线,False不闭合 + cv2.polylines(img, [pts], False, (0, 255, 255)) + + # 添加文本,指定文本内容,左下角坐标,字体,大小,颜色,厚度,线性 + font = cv2.FONT_HERSHEY_SIMPLEX + cv2.putText(img, '123321123ddd', (0, 500), font, 1, (255, 255, 255), 2, cv2.LINE_AA) + + cv2.imshow('window1', img) + key_event = cv2.waitKey(0) + cv2.destroyAllWindows() +``` + +## 3.访问修改像素值 +```python +import time +import cv2 +import numpy as np + +if __name__ == '__main__': + img = cv2.imread('roi.jpg') + # 通过行列坐标访问像素,BGR图像返回一个[蓝色,绿色,红色值]的数组,灰度图像仅返回相应的强度 + px = img[100, 100] + print(px) + # 修改像素 + img[100, 100] = [255, 255, 255] + print(img[100, 100]) + # 图像的形状,数据类型 + print(img.shape, img.dtype) + + # 替换指定区域图像 + ball = img[220:280, 270:330] + img[100:160, 100:160] = ball + + # 分割合并图像通道,一般用numpy索引 或者:b = img[:, :, 0] + b, g, r = cv2.split(img) + img = cv2.merge((b, g, r)) + + cv2.imshow('window1', img) + key_event = cv2.waitKey(0) + cv2.destroyAllWindows() + + # 将红色通道全部设置为0 + img[:, :, 2] = 0 + + cv2.imshow('window1', img) # 窗口显示图像 + key_event = cv2.waitKey(0) + cv2.destroyAllWindows() +``` From aa16a86444a4d700a3d6c9102f1f2f09bd947948 Mon Sep 17 00:00:00 2001 From: daacheng <1193685537@qq.com> Date: Wed, 5 May 2021 21:36:32 +0800 Subject: [PATCH 2/6] numpy numpy --- "data_analysis/Numpy\345\237\272\347\241\200.md" | 1 + data_analysis/main.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 "data_analysis/Numpy\345\237\272\347\241\200.md" diff --git "a/data_analysis/Numpy\345\237\272\347\241\200.md" "b/data_analysis/Numpy\345\237\272\347\241\200.md" new file mode 100644 index 0000000..f7fa5db --- /dev/null +++ "b/data_analysis/Numpy\345\237\272\347\241\200.md" @@ -0,0 +1 @@ +# Numpy基础 diff --git a/data_analysis/main.md b/data_analysis/main.md index b458bb2..198cc92 100644 --- a/data_analysis/main.md +++ b/data_analysis/main.md @@ -1,4 +1,4 @@ ## 数据分析 1. [《深入浅出统计学》笔记上](深入浅出统计学笔记上.md) - 2. [《深入浅出统计学》笔记下](深入浅出统计学笔记下.md) +3. [Python Numpy基础](Numpy基础.md) From 278f28f5669dae383f2d3fac4a4ad6698e886613 Mon Sep 17 00:00:00 2001 From: daacheng <1193685537@qq.com> Date: Wed, 5 May 2021 22:39:32 +0800 Subject: [PATCH 3/6] StringIO StringIO --- ...73\345\206\231\346\225\260\346\215\256.md" | 50 +++++++++++++++++++ python_basic/main.md | 1 + 2 files changed, 51 insertions(+) create mode 100644 "python_basic/Python\345\234\250\345\206\205\345\255\230\344\270\255\350\257\273\345\206\231\346\225\260\346\215\256.md" diff --git "a/python_basic/Python\345\234\250\345\206\205\345\255\230\344\270\255\350\257\273\345\206\231\346\225\260\346\215\256.md" "b/python_basic/Python\345\234\250\345\206\205\345\255\230\344\270\255\350\257\273\345\206\231\346\225\260\346\215\256.md" new file mode 100644 index 0000000..67c6194 --- /dev/null +++ "b/python_basic/Python\345\234\250\345\206\205\345\255\230\344\270\255\350\257\273\345\206\231\346\225\260\346\215\256.md" @@ -0,0 +1,50 @@ +# Python在内存中读写数据 +有时候数据不一定要读写到文件中,可以再内存中进行读写操作。 + +有些场景本地不保存数据,从远程读取文件数据到本地内存中进行处理后,再把数据流推送到远程,从头到尾本地并不生成文件。 + +**比如读取服务器一个加密文件数据流到内存中,在内存中进行解析处理,最终将解密后的数据流推送到服务器,中间不需要在本地保存加密文件,直接在内存中处理,减少了IO操作。** +## StringIO +```python +from io import StringIO + +if __name__ == '__main__': + s = StringIO() + s.write('123\n') + s.write('456\n') + s.write('aaa\n') + s.write('bbb') + print(s) # <_io.StringIO object at 0x0000022F7440F9D8> + # 获取写入的内容 + print(s.getvalue()) # '123\n456\naaa\nbbb' + # tell()方法返回文件指针当前位置 + print(s.tell()) # 15 + + # seek(offset, whence)方法用于移动文件读取指针到指定位置 + # offset:代表需要移动偏移的字节数 + # whence:默认0,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。 + s.seek(0, 0) + + print(s.tell()) # 0 + print(s.readlines()) # ['123\n', '456\n', 'aaa\n', 'bbb'] + + print(s.tell()) # 15 + print(s.readlines()) # [] +``` + +## BytesIO +```python +from io import BytesIO + +if __name__ == '__main__': + f = BytesIO() + + fr = open('test.mp4', 'rb') + f.write(fr.read()) + fr.close() + + # 对视频流解析处理 + + with open('local_test.mp4', 'wb') as fw: + fw.write(f.getvalue()) +``` diff --git a/python_basic/main.md b/python_basic/main.md index 8d63f7e..6c30271 100644 --- a/python_basic/main.md +++ b/python_basic/main.md @@ -27,3 +27,4 @@ * [@property 保护变量的访问与设置](保护变量的访问与设置.md) * [Python函数参数的传递机制](Python函数参数的传递机制.md) * [Python猴子补丁 monkey patch](猴子补丁.md) +* [Python在内存中读写数据StringIO/BytesIO](Python在内存中读写数据.md) From b862bdf2c6acd8380e233ef05a9357290e802d53 Mon Sep 17 00:00:00 2001 From: daacheng <1193685537@qq.com> Date: Thu, 19 Aug 2021 18:07:27 +0800 Subject: [PATCH 4/6] =?UTF-8?q?tmux=E5=B8=B8=E7=94=A8=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...15\344\275\234\345\221\275\344\273\244.md" | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 "linux/tmux\345\270\270\347\224\250\346\223\215\344\275\234\345\221\275\344\273\244.md" diff --git "a/linux/tmux\345\270\270\347\224\250\346\223\215\344\275\234\345\221\275\344\273\244.md" "b/linux/tmux\345\270\270\347\224\250\346\223\215\344\275\234\345\221\275\344\273\244.md" new file mode 100644 index 0000000..fb345f7 --- /dev/null +++ "b/linux/tmux\345\270\270\347\224\250\346\223\215\344\275\234\345\221\275\344\273\244.md" @@ -0,0 +1,23 @@ +## tmux 命令 +#### 会话 session +* tmux:直接创建一个默认的会话session +* tmux ls: 查看所有的会话,快捷键:ctrl+b s +* tmux new -s session_name: 指定会话名称创建会话 +* tmux detach: 离开会话,快捷键:ctrl+b d +* tmux a -t session_name: 进入会话 +* tmux kill-session -t session_name: 杀掉会话,快捷键:ctrl+d +* tmux rename-session -t old_name new_name: 重命名session + +#### 窗口 windows +* tmux new-window -n window_name: 新建一个窗口 +* **ctrl+b w: 查看所有窗口** +* tmux select-window -t window_name: 切换窗口 +* tmux kill-window -t window_name: 关闭窗口,快捷键:ctrl+b & 关闭当前窗口 + +#### 窗格 pane +* tmux split-window: 上下切割,快捷键:ctrl+b % +* tmux split-window -h: 左右切割,快捷键:ctrl+b " +* ctrl+b 方向键:切换窗格 +* ctrl+b x: 关闭窗格 + + From 4c5655545bc04649ae8a994cf3fe630d272bef07 Mon Sep 17 00:00:00 2001 From: daacheng <1193685537@qq.com> Date: Thu, 19 Aug 2021 18:10:22 +0800 Subject: [PATCH 5/6] update main --- linux/main.md | 1 + 1 file changed, 1 insertion(+) diff --git a/linux/main.md b/linux/main.md index 8186955..cedac38 100644 --- a/linux/main.md +++ b/linux/main.md @@ -1,5 +1,6 @@ ## Linux相关 1. [Linux常用操作命令(更新……)](Linux常用操作命令.md) +2. [tmux常用操作命令](tmux常用操作命令.md) ## Linux基础 2. [Linux文件属性与权限](Linux文件权限.md) From 2e13f23254e8685a11b62ddf6c13b3774d0a61ad Mon Sep 17 00:00:00 2001 From: daacheng <1193685537@qq.com> Date: Tue, 28 Sep 2021 15:45:59 +0800 Subject: [PATCH 6/6] update update --- .../redis\345\237\272\347\241\200\346\223\215\344\275\234.md" | 2 ++ 1 file changed, 2 insertions(+) diff --git "a/others/redis\345\237\272\347\241\200\346\223\215\344\275\234.md" "b/others/redis\345\237\272\347\241\200\346\223\215\344\275\234.md" index 8c77452..8c74b90 100644 --- "a/others/redis\345\237\272\347\241\200\346\223\215\344\275\234.md" +++ "b/others/redis\345\237\272\347\241\200\346\223\215\344\275\234.md" @@ -12,6 +12,8 @@ Redis是一个基于内存的高性能key-value数据库。 #### 4.redis是单进程单线程的 redis利用队列将并发访问变为串行访问。 +redis连接指定数据库:redis-cli -n 1 + ## key * keys * : 查看所有的key * del key : 删除指定的key