提供一张图片,如何截剪其中的某一部分的区域?
我的思路是分两步:
-
找到要裁剪区域的坐标
-
根据图片坐标进行剪切,并保存
import cv2
from PIL import Image
def getCoordinate(img):
rectangle = []
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 灰度图
ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY|cv2.THRESH_OTSU) # 二值化
element3 = cv2.getStructuringElement(cv2.MORPH_RECT, (8, 8)) # 设置膨胀和腐蚀操作
dilation = cv2.dilate(binary, element3, iterations=1) # 膨胀一次,让轮廓突出
contours, hierarchy = cv2.findContours(dilation, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_TC89_L1) # 检测轮廓
cv2.drawContours(img, contours, -1, (0, 0, 255), 3) # 参数值为1, 给contours[1]绘制轮廓。 -1: 给所有的contours绘制轮廓
cv2.imshow("img", img)
cv2.waitKey()
for contour in contours:
x, y, w, h = cv2.boundingRect(contour)
rectangle.append((x, y, x + w, y + h))
print(f'rectangle: {rectangle}')
return rectangle
if __name__ == '__main__':
imgPath = 'D:\\img.bmp'
img = cv2.imread(imgPath)
# 保存
getCoordinate(img)
import cv2
from PIL import Image
def savePic(rectangle):
for i in range(len(rectangle)):
imgPath = "D:\\PythonWork\\Contour\\Photos\\" + str(i+1) + ".PNG" #notes: 图片的扩展名要一致
im = Image.open(defaultImgPath)
im = im.crop(rectangle[i]) # 对图片进行切割 im.crop(top_x, top_y, bottom_x, bottom_y)
im.save(imgPath)
if __name__ == '__main__':
defaultImgPath = 'D:\\test.PNG'
img = cv2.imread(defaultImgPath)
# 保存图片,getCoordinate()可以查看上一步中的源码
coordinateValue = getCoordinate(img)
savePic(coordinateValue)
1. getCoordinate()可以查看一、获取感兴趣图片坐标中的源码
2. 如果指定某一区域坐标,main主函数如下:
if __name__ == '__main__':
rnt = [(46, 28, 101, 61)]
savePic(rnt)
-
cv2.COLOR_BGR2GRAY 将BGR格式转换成灰度图片 灰度图片并不是指常规意义上的黑白图片,只用看是不是无符号八位整型(unit8)
-
ret,dst = cv2.threshold(src,thresh,maxval,type) #返回的第一个参数为阈值,第二个为结果图像
-
cv2.threshold(dilation, 0, 255, cv2.THRESH_BINARY) #二值化 将灰度图dilation中灰度值小于0的点置0,灰度值大于255的点置255
-
cv2.getStructuringElement(shape, ksize)
cv2.getStructuringElement(cv2.MORPH_RECT, (8, 8)) #设置膨胀和腐蚀操作的核函数
cv2.MORPH_RECT: 矩形结构元素,所有元素值都是1 ksize:代表形状元素的大小
-
cv2.dilate(binary, element3, iterations=1) #膨胀一次,让轮廓突出
-
cv2.findContours()函数接受的参数为二值图,即黑白的(不是灰度图),所以读取的图像要先转成灰度的,再转成二值图
cv2.findContours(dilation, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_TC89_L1) #查找轮廓
cv2.RETR_EXTERNAL 表示只检测外轮廓
cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS 使用teh-Chinl chain 近似算法
cv2.findContours()函数返回两个值,一个是轮廓本身,还有一个是每条轮廓对应的属性。
contours返回值:cv2.findContours()函数首先返回一个list,list中每个元素都是图像中的一个轮廓,用numpy中的ndarray表示。可以通过len(contours)知道返回的轮廓。
- cv2.boundingRect(contour):矩形边框(Bounding Rectangle)是说,用一个最小的矩形,把找到的形状包起来。
Original: https://blog.csdn.net/spring_r/article/details/125514686
Author: spring_r
Title: Python截取图片区域并保存03
相关阅读1
Title: 内网机conda环境配置流程
多次被公司的内网机搞到崩溃后,我下定决心摸一会鱼写篇文章总结一下,希望以后不需要再用到了。
诚挚感谢几位原作者的分享,我只是搬运工。
内外网电脑各一台,系统都是windows,(重点)一个有权限的老板帮我在两台机子之间拷文件。
conda create --name [environment name] python==[3.7]
python版本不一样的话下的包是不通用的,如果非要自己手动下的话也需要注意一下,比如:
tensorflow-2.3.0-cp37-cp37m-win_amd64.whl
,这里面 _cp37_的意思就是适用python3.7.
为什么还需要一台外网机,不直接从镜像网站下包:
很多包是有依赖的前置包的,有的前置包又有自己的前置,如果是全新的环境的话需要安十几个,甚至几十个前置的依赖包,顺序也有好几层。手动去弄太麻烦了,而且也会有版本匹配问题。
方法1:直接打包环境
推荐重新配环境的时候用这种方法,一次就完成了,比较快。
conda install conda-pack
可以跑一些基础的代码试一下,没有问题的话就可以开始打包了:
conda pack -n [environment name] -o [target file name].tar.gz
后半部分也可以不加。打包完成后,拷到内网,开始在内网机上操作。
conda config --set offline true
makedir [folder name]
tar -zxvf [env name].tar.gz -C [folder name]
source [folder name]/bin/activate
方法2:从外网批量下载依赖包
打包过后的环境用到一半想起有的包没安,以及由于 _tensroflow-gpu_这种我的丐版外网机装不上的高级东西,又搜罗了单个包的安装方法。
pip download [package] -d ./[target folder]
cd C:\
,以去D盘为例,直接输:
D:
。在目标文件夹里面:
pip install -r requirement.txt
完成!
好像还有一种不会全部更新依赖包的方法,但用那个每次都出错,我也懒得找了,有需要的自己百度一下吧。
这种全部更新的方法的问题就在于依赖包的版本,比如我用的 tensorflow_是2.3.0,匹配 _numpy 1.19及以下的某几个版本,但我安另一个包的时候就直接给我更新到更高的版本去了,同一份代码就开始报错。
解决:那种方法在我的环境里不好使,我就直接重安了一遍numpy......
如果能帮看到的人节省一点百度的时间我就很高兴啦。
Original: https://blog.csdn.net/tiezhu_yuan/article/details/123548122
Author: 学术界巨饿袁铁柱
Title: 内网机conda环境配置流程
相关阅读2
Title: 多任务学习-Multitask Learning概述zz
1、单任务学习VS多任务学习
单任务学习:一次只学习一个任务(task),大部分的机器学习任务都属于单任务学习。
多任务学习:把多个相关(related)的任务放在一起学习,同时学习多个任务。
多任务学习(multitask learning)产生的原因?
现在大多数机器学习任务都是单任务学习。对于复杂的问题,也可以分解为简单且相互独立的子问题来单独解决,然后再合并结果,得到最初复杂问题的结果。这样做看似合理,其实是不正确的,因为现实世界中很多问题不能分解为一个一个独立的子问题,即使可以分解,各个子问题之间也是相互关联的,通过一些共享因素或共享表示(share representation)联系在一起。把现实问题当做一个个独立的单任务处理,忽略了问题之间所富含的丰富的关联信息。多任务学习就是为了解决这个问题而诞生的。把多个相关(related)的任务(task)放在一起学习。这样做真的有效吗?答案是肯定的。多个任务之间共享一些因素,它们可以在学习过程中,共享它们所学到的信息,这是单任务学习所具备的。相关联的多任务学习比单任务学习能去的更好的泛化(generalization)效果。
单任务与多任务对比如图1所示:
图1 单任务学习与多任务学习对比
从图1中可以发现,单任务学习时,各个任务之间的模型空间(Trained Model)是相互独立的(图1上)。多任务学习时,多个任务之间的模型空间(Trained Model)是共享的(图1下)。
假设用含一个隐含层的神经网络来表示学习一个任务,单任务学习和多任务学习可以表示成如图2所示。
图2 基于单层神经网络的单任务和多任务学习对比
从图二可以发现,单任务学习时,各个task任务的学习是相互独立的,多任务学习时,多个任务之间的浅层表示共享(shared representation)。
2、多任务学习的定义
多任务学习(Multitask learning)定义:基于共享表示(shared representation),把多个相关的任务放在一起学习的一种机器学习方法。
多任务学习(Multitask Learning)是一种推导迁移学习方法,主任务(main tasks)使用相关任务(related tasks)的训练信号(training signal)所拥有的领域相关信息(domain-specific information),做为一直推导偏差(inductive bias)来提升主任务(main tasks)泛化效果(generalization performance)的一种机器学习方法。多任务学习涉及多个相关的任务同时并行学习,梯度同时反向传播,多个任务通过底层的共享表示(shared representation)来互相帮助学习,提升泛化效果。简单来说:多任务学习把多个相关的任务放在一起学习(注意,一定要是相关的任务,后面会给出相关任务(related tasks)的定义,以及他们共享了那些信息),学习过程(training)中通过一个在浅层的共享(shared representation)表示来互相分享、互相补充学习到的领域相关的信息(domain information),互相促进学习,提升泛化的效果。
共享表示shared representation:
共享表示的目的是为了提高泛化(improving generalization),图2中给出了多任务学习最简单的共享方式,多个任务在浅层共享参数。MTL中共享表示有两种方式:
(1)、基于参数的共享(Parameter based):比如基于神经网络的MTL,高斯处理过程。
(2)、基于约束的共享(regularization based):比如均值,联合特征(Joint feature)学习(创建一个常见的特征集合)。
3、多任务学习有效的原因
为什么把多个相关的任务放在一起学习,可以提高学习的效果?关于这个问题,有很多解释。这里列出其中一部分,以图2中由单隐含层神经网络表示的单任务和多任务学习对比为例。
(1)、多人相关任务放在一起学习,有相关的部分,但也有不相关的部分。当学习一个任务(Main task)时,与该任务不相关的部分,在学习过程中相当于是噪声,因此,引入噪声可以提高学习的泛化(generalization)效果。
(2)、单任务学习时,梯度的反向传播倾向于陷入局部极小值。多任务学习中不同任务的局部极小值处于不同的位置,通过相互作用,可以帮助隐含层逃离局部极小值。
(3)、添加的任务可以改变权值更新的动态特性,可能使网络更适合多任务学习。比如,多任务并行学习,提升了浅层共享层(shared representation)的学习速率,可能,较大的学习速率提升了学习效果。
(4)、多个任务在浅层共享表示,可能削弱了网络的能力,降低网络过拟合,提升了泛化效果。
还有很多潜在的解释,为什么多任务并行学习可以提升学习效果(performance)。多任务学习有效,是因为它是建立在多个相关的,具有共享表示(shared representation)的任务基础之上的,因此,需要定义一下,什么样的任务之间是相关的。
4、相关(relate)定义
相关(related)的具体定义很难,但我们可以知道的是,在多任务学习中,related tasks可以提升main task的学习效果,基于这点得到相关的定义:
Related(Main Task,Related tasks,LearningAlg)= 1
LearningAlg(Main Task||Related tasks)> LearningAlg(Main Task) (1)
LearningAlg表示多任务学习采用的算法,公式(1):第一个公式表示,把Related tasks与main tasks放在一起学习,效果更好;第二个公式表示,基于related tasks,采用LearningAlg算法的多任务学习Main task,要比单学习main task的条件概率概率更大。特别注意,相同的学习任务,基于不同学习算法,得到相关的结果不一样:
Related(Main Task,Related tasks,LearningAlg1)不等于 Related(Main Task,Related tasks,LearningAlg2)
5、多任务学习中的相关关系(task relationship)
多任务学习并行学习时,有5个相关因素可以帮助提升多任务学习的效果。
(1)、数据放大(data amplification)。相关任务在学习过程中产生的额外有用的信息可以有效方法数据/样本(data)的大小/效果。主要有三种数据放大类型:统计数据放大(statistical data amplification)、采样数据放大(sampling data amplification),块数据放大(blocking data amplification)。
(2)、Eavesdropping(窃听)。假设
(3)、属性选择(attribute selection)
(4)、表示偏移(representation bias)
(5)、预防过拟合(overfitting prevention)
所有这些关系(relationships)都可以帮助提升学习效果(improve learning performance),关系具体定义可以参考文献[1]
6、Multitask Learning方法
浅层隐含层节点共享神经网络是最简单MTL,如图2所示。还有基于特征(feature table)共享MTL。
基于特征的共享MTL(联合特征学习,Joint feature learning),通过创建一个常见的特征集合来实现多个任务之间基于特征(features)的shared representation,其共享表示如图3所示。
图3 基于特征的共享表示示意图
基于特征共享的MTL输入输出关系如图4所示,其中采用L1正则来保证稀疏性。
图4 基于joint feature的MTL示意图
如图4,等号左边nxp的输入矩阵,乘上一个由k个任务构成的pxk的共享特征矩阵,加上一个nxk的噪声矩阵(不相关部分),就得到了左边的输出矩阵。
其他多任务学习方法还有均值约束 MTL:基于均值来约束所有的task,参数共享的高斯处理MTL,低秩约束MTL,交替结构优化MTL等等。
7、多任务学习与其他学习算法之间的关系
多任务学习(Multitask learning)是迁移学习算法的一种,迁移学习之前介绍过。定义一个一个源领域source domain和一个目标领域(target domain),在source domain学习,并把学习到的知识迁移到target domain,提升target domain的学习效果(performance)。
多标签学习(Multilabel learning)是多任务学习中的一种,建模多个label之间的相关性,同时对多个label进行建模,多个类别之间共享相同的数据/特征。
多类别学习(Multiclass learning)是多标签学习任务中的一种,对多个相互独立的类别(classes)进行建模。这几个学习之间的关系如图5所示:
图5 多任务学习与其他机器学习方法之间的关系
8、多任务学习应用概述
基于神经网络的多任务学习,尤其是基于深度神经网络的多任务学习(DL based Multitask Learning),适用于解决很多NLP领域的问题,比如把词性标注、句子句法成分划分、命名实体识别、语义角色标注等任务,都可以采用MTL任务来解决。
其他MTL的应用还有,网页图片和语音搜索[Zhou et. al. KDD'11],疾病预测[Zhang et. al. NeuroImage 12]等等
Original: https://www.cnblogs.com/end/p/16398171.html
Author: 风生水起
Title: 多任务学习-Multitask Learning概述zz
相关阅读3
Title: Tensorflow概要和安装过程
一、TensorFlow 概要
由 Google Brain 开源,设计初衷是加速机器学习的研究
2015 年 11 月在 GitHub 上开源
2016 年 4 月分布式版本
2017 年发布了 1.0 版本,趋于稳定
Google 希望让这个优秀的工具得到更多的应用,从整体上提高深度学习的效率
TensorFlow 实现的算法可以在众多异构的系统上方便地移植,比如 Android 手机、
iphone、 普通的 CPU 服务器、大规模 GPU 集群
除了执行深度学习算法,TensorFlow 还可以用来实现很多其他算法,包括线性回归、
逻辑回归、随机森林等
TensorFlow 建立的大规模深度学习模型应用场景也非常广,包括语音识别、自然语言
处理、计算机视觉、机器人控制、信息抽取、药物研发、分子活动预测
二、TensorFlow 相关链接
TensorFlow 官方网址: https://www.tensorflow.org/ (需要翻墙)
TensorFlow 官方网址中文官网: 关于TensorFlow | TensorFlow中文官网
GitHub 网址: GitHub - tensorflow/tensorflow: An Open Source Machine Learning Framework for Everyone
模型仓库网址: GitHub - tensorflow/models: Models and examples built with TensorFlow
三、其他深度学习框架
TensorFlow、Caffe、Keras、CNTK、Torch7、MXNet、Leaf、Theano、DeepLearning4J、
Lasagne、Neon
四、安装tensorflow
1、CPU 版本的安装
第一步:安装VS环境
Download Visual C++ Redistributable for Visual Studio 2015 from Official Microsoft Download Center
之后就一路next
安装的时候可能报的错是 系统里面有VS的环境了;
查看的方法
表示系统里面有VS环境了
注意:如果系统有VS环境了,那这一步就不用安装,如果在 Ubuntu16.04 这样的 Linux 系统或 Mac 系统中安装 TensorFlow 则不用管这一步
第二步:配置python的镜像源
在 C:\Users(用户名)目录下,创建一个 pip 文件夹,创建一个 pip.ini 文件,
里面就写:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
第三步:用命令安装Tensorflow(对python版本有所要求)
2、GPU版本安装
python tensorflow cuda cudaa 版本匹配查看 在 Windows 环境中从源代码构建 | TensorFlow
第一步:安装VS环境
Download Visual C++ Redistributable for Visual Studio 2015 from Official Microsoft Download Center
之后就一路next
安装的时候可能报的错是 系统里面有VS的环境了;
查看的方法
表示系统里面有VS环境了
注意:如果系统有VS环境了,那这一步就不用安装,如果在 Ubuntu16.04 这样的 Linux 系统或 Mac 系统中安装 TensorFlow 则不用管这一步
第二步:Cuda安装(对tensorflow版本相匹配)
1、下载网址: CUDA Toolkit Archive | NVIDIA Developer
2、解压 cuda,点击解压后文件夹的 setup.exe 去安装
查看兼容性的网址: CUDA GPUs | NVIDIA Developer
如果兼容性检查没有问题,就选择推荐的精简去一路 next
如果兼容性检查出现感叹号,就选择自定义里面勾选上 development 和 runtime,一
路 next
第三步:Cudnn安装(要和第二步Cuda版本相匹配)
1、下载网址: cuDNN Archive | NVIDIA Developer
2、解压 cudnn,把里面的 lib、include 和 bin 目录里面的三个小文件拷贝到
cuda 安装的目录对应的文件夹里面去
第四步:配置python的镜像源
在 C:\Users(用户名)目录下,创建一个 pip 文件夹,创建一个 pip.ini 文件,
里面就写:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
第五步:cudart64_101 安装
第六步:用命令安装Tensorflow(对python版本有所要求)
Original: https://blog.csdn.net/qq_53582111/article/details/122635886
Author: 宠乖仪
Title: Tensorflow概要和安装过程