先逼逼两句:

图像是 Web 应用中除文字外最普遍的媒体格式。

流行的 Web 静态图片有 JPEG、PNG、ICO、BMP 等。动态图片主要是 GIF 格式。

为了节省图片传输流量,大型互联网公司还会定制特殊格式的图片,WEBP 格式就是一个代表。

Python 除了数据分析,做图片处理也是非常好用的。

用 Python 做图片处理,最著名的库就是 PIL(Python Imaging Library)了,支持最新的 Python3,而且有许多新的特性,Pillow也成为了 Python 图片处理必不可少的工具之一了。

不过我们今天要使用的作图库是OpenCV Python ,下一期我们再来研究PIL

这篇文章主要介绍了Python+OpenCV实现图像二值化,帮助大家更好的利用python处理图片,感兴趣的朋友可以了解下。

图片处理库准备

OpenCV Python 来处理图片,安装过程如下:

pip install opencv-python


图片加载

我们先来打开一张图片测试,如下可以成功加载图片表示已经

成功安装OpenCV-Python

图片缩放

在保持图片细节不变的前提下,把图片放大或者缩小。

其中img 是图片对象,img.shape 表示图片的形状大小,分别是高、宽、通道数。

# 获取图片尺寸
img = cv2.imread("./pic1.jpg")
h, w, ch = img.shape
print(h, w, ch) '''
1240 960 3
'''

我们的思路如下:

程序读入图片文件,用 cv2.resize 方法,把图片等比例缩放为一半的大小。

Python学习交流Q群:660193417###
# 获取图片尺寸
img = cv2.imread("./pic1.jpg")
h, w, ch = img.shape
print('原图尺寸:', h, w, ch) new_h = int(h / 2)
new_w = int(w / 2)
res = cv2.resize(img, (new_w, new_h), interpolation=cv2.INTER_LINEAR)
cv2.imwrite('./half_pic1.jpg', res) # 获取图片尺寸
img = cv2.imread("./half_pic1.jpg")
h, w, ch = img.shape
print('缩半原图尺寸:', h, w, ch) '''
原图尺寸:1240 960 3
缩半原图尺寸:620 480 3
'''

实际效果如下:


图片裁剪

把图片的局部形状截取出来,这里我们截取小姐姐图像,按照自己需求去掉前后左右多余边框。

Python学习交流Q群:660193417###
img = cv2.imread("./pic1.jpg")
h, w, ch = img.shape
print(h, w, ch)
# (x0,y0) (x1,y1) 矩阵
x0, y0 = 200, 80
x1, y1 = 880, 960
# img 是一个按行扫描的矩阵
res = img[y0:y1, x0:x1]
print('截取后 H,W=', res.shape[:2])
cv2.imwrite('./pic.jpg', res) '''
1240 960 3
截取后 H,W= (880, 680)
'''

实际效果如下:


图像组合

把两个或者多个图像进行堆叠、拼接。

准备一个原图 pic1.jpg,再准备一个水印图 img.png,目标是把水印贴在人像图的最右下方。

# 读取原始图片
image = cv2.imread('./pic1.jpg')
(h, w) = image.shape[:2]
print("SOURCE", image.shape) # 读取水印
imgsy = cv2.imread('./img.png')
(h_sy, w_sy) = imgsy.shape[:2]
print("SHUIYIN", imgsy.shape) # 定义原图片选区
roi = image[h - h_sy:h, w - w_sy:w] # 原图片选区和水印区融合,让水印透明
for y in range(h_sy):
for x in range(w_sy): p = imgsy[y, x]
if (p[0], p[1], p[2]) == (0, 0, 0):
imgsy[y, x] = roi[y, x] cv2.imwrite('./shuiyin+roi.png', imgsy) # 选区范围设定为融合后的水印
image[h - h_sy: h, w - w_sy: w] = imgsy cv2.imwrite('./pic_sy.jpg', image)


Python+opencv打开修图的正确方式get的更多相关文章

  1. python+opencv 打开网络摄像头

    python+opencv 打开网络摄像头(手机)(转) #以下是最常用的读取视频流的方法import cv2url = 'rtsp://admin:admin@192.169.5.2:554/'#根 ...

  2. RPi 2B python opencv camera demo example

    /************************************************************************************** * RPi 2B pyt ...

  3. 转载:python文件打开方式详解——a、a+、r+、w+区别

    第一步 排除文件打开方式错误: r只读,r+读写,不创建      ###f.readline()是读取第一行,f.readlines()是读取全部并返回一个列表 w新建只写,w+新建读写,会将文件内 ...

  4. python文件打开方式详解——a、a+、r+、w+区别

    出处: http://blog.csdn.net/ztf312/ 第一步 排除文件打开方式错误: r只读,r+读写,不创建 w新建只写,w+新建读写,二者都会将文件内容清零 (以w方式打开,不能读出. ...

  5. 打开ElasticSearch、kibana、logstash的正确方式

    作者:玩世不恭的Coder时间:2020-03-08说明:原创不易,本文为原创文章,未经允许不可转载,转载前请联系作者 打开ElasticSearch.kibana.logstash的正确方式 前言一 ...

  6. 【转】python文件打开方式详解——a、a+、r+、w+区别

    原文地址:http://blog.csdn.net/ztf312/article/details/47259805 第一步 排除文件打开方式错误: r只读,r+读写,不创建 w新建只写,w+新建读写, ...

  7. 搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台

    搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台 By 子敬叔叔 最近在学习麦好的<机器学习实践指南案例应用解析第二版>,在安装学习环境的时候 ...

  8. Python文件处理之文件读取方式(二)

    Python的open文件的读取方式有以下几种方法: read([size]):读取文件,如果传了size参数,则读取size字节,否则读取全部 readline([size]):读取一行 readl ...

  9. Python+OpenCV图像处理(一)

    Python+OpenCV图像处理(一): 读取,写入和展示图片 调用摄像头拍照 调用摄像头录制视频 1. 读取.写入和展示图片 图像读入:cv2.imread() 使用函数cv2.imread() ...

随机推荐

  1. Codeforces Round #700 (Div. 2) --- B(思维)

    传送门 有必要提醒自己一下, 先把题读利索了(手动捂脸) 题目 B. The Great Hero   The great hero guards the country where Homer li ...

  2. 2022-Aech安装(详细)

    官方wiki:https://wiki.archlinux.org/ 基础安装 一:制作安装介质 下载ISO镜像文件: https://archlinux.org/download/ # 官方下载网址 ...

  3. 【FAQ】HMS Core广告服务:如何获取正式广告位ID以及流量变现的受限情况

    HMS Core广告服务开发指南中提到"xxxx为测试专用的广告位ID,App正式发布时需要改为正式的广告位ID",那么今天咱们就来说说,怎么获取正式的广告位ID. 测试广告位ID ...

  4. XCTF练习题---CRYPTO---告诉你个秘密

    XCTF练习题---CRYPTO---告诉你个秘密 flag:TONGYUAN 步骤解读: 1.观察题目,下载附件 2.打开附件,内容好像有点像十六进制,先进行一下十六进制转换,得到一串字符 网址:h ...

  5. 从Windows切换到Linux?看这篇就够了!

    作者:栈栈 链接:CU技术社区 微软已经马上准备在2020年1月份终止对Windows 7的支持,这意味着您将不再获得bug修复或安全更新.如果您是Windows 7的最终支持者之一,并且不想陷入一个 ...

  6. 干货|给小白的 Nginx 10分钟入门指南

    一个执着于技术的公众号 前言 今天主要对Nginx Web服务软件进行介绍,作为HTTP服务软件的后起之秀,Nginx与它的老大哥Apache相比有很多改进之处,比如,在性能上,Nginx占用的系统资 ...

  7. linux部署项目(前后端分离项目)

    参考博客 技术栈 路飞学城部署 vue + nginx + uwsgi + django + mysql + redis(就是一个key - value型数据库,缓存型数据库,内存型数据库) 部署步骤 ...

  8. 三个小项目入门Go语言|字节青训营笔记

    前言 这是青训营的第一课,今天的课程比较快速的讲解了go语言的入门,并配合三个小的项目实践梳理所学知识点,这里详细回顾一下这三个项目,结合课后作业要求做一些代码补充,并附上自己的分析,青训期间的所有课 ...

  9. c# SendInput模拟输入字符和按键

    介绍: 该程序本意是为了在彩六里打中文用的,现整理出来供大家复制粘贴.(源程序已开源至GitHub - 彩六中文输入) 主要使用SendInput函数,与c语言中用法一致.(部分代码来自网络) 命名空 ...

  10. Nginx分片限流

    一.全局限流 在http节点中添加 # 创建限流规则 limit_req_zone $binary_remote_addr zone=addr:10m rate=1r/s;# 客户端进行限流 # li ...