from utils.utils import Directory_Hanlder # Directory_Hanlder代码链接:https://blog.csdn.net/qq_16555103/article/details/107146429
import os
import time
import re
from tqdm import tqdm
import cv2
import numpy as np
import argparse
# 读取带有中文路径的图片
def cn_imread(filePath):
cv_img = cv2.imdecode(np.fromfile(filePath, dtype=np.uint8), cv2.IMREAD_COLOR)
cv2.imdecode 参数与 cv2.imread 打开的图片相似,如果不需要第四通道,选择 cv2.IMREAD_COLOR,此时读取图片的格式为 bgr
cv2.IMREAD_COLOR:加载彩色图片,这个是默认参数,可以直接写1。
cv2.IMREAD_GRAYSCALE:以灰度模式加载图片,可以直接写0。
cv2.IMREAD_UNCHANGED:包括alpha,可以直接写-1
except Exception as e:
print('当前图片opencv无法读取,原因为:\n{}'.format(e))
cv_img = None
return cv_img
# 保存带有中文路径的图片
def cn_imwrite(file_path , img_array):
# 这个方法需要特别注意,img_array一定是一个BGR格式的uint8 ndarray
cv2.imencode('.jpg', img_array)[1].tofile(file_path)
def single_img_save(img_array,report_path,img_name):
输入 img BGR格式的数组,保存图片【.jpg】到指定路径
:param img_array:
:return:
img_path = os.path.join(report_path,img_name)
cn_imwrite(img_path,img_array)
# cv2.imwrite(img_path, img_array)
def single_img_intercept(fpath,top=0.0,battle=0.125):
给定一张需要剪切的图片的路径 与 图片上下需要剪切的比例
:param fpath: 图片的路径
:param top: 图片上侧的比例
:param battle: 图片下侧的比例
:return:
img = cn_imread(fpath)
if img is None:
return None
img_shape = img.shape
height,weight = img_shape[0],img_shape[1]
height_start = int(np.floor(top*height))
height_end = int(-1 * np.floor(battle*height))
img = img[height_start:height_end]
return img
if __name__ == '__main__':
# 创建对象
parser = argparse.ArgumentParser()
# 添加参数
parser.add_argument('--Dir', help='source dir',type=str)
parser.add_argument('--top', help='top value',type=float)
parser.add_argument('--battle', help='battle value',type=float)
# 使用parse_args解析参数
args = parser.parse_args()
dir_ = args.Dir
top = args.top
battle = args.battle
# 构建路径
source_dir = dir_
report_dir_path = os.path.join(source_dir, 'report_img')
Directory_Hanlder.check_directory(report_dir_path)
Directory_Hanlder.clean_directory(report_dir_path)
# 遍历文件夹下所有的文件
files_path, dirs_path = Directory_Hanlder.list_dir_all_files(source_dir)
# 重写图片名
for idx,img in tqdm(enumerate(files_path)):
# 将指定的文件img复制到report_dir_path的文件夹里面
img_array = single_img_intercept(img,top=top,battle=battle)
if img_array is None:
continue
img_name = img.split('\\')[-1]
single_img_save(img_array,report_dir_path,img_name)
参考:
OpenCV—Python 图像指定区域裁剪
# 按指定图像大小调整尺寸
def resize_
im
age(
im
age, height = 640, width = 480):
top, bottom, left, right = (0,0,0,0)
# 获取
图片
尺寸
h, w, _ =
im
age.shape
# 对于长宽不等的
图片
,找到最长的一边
longest_edge = max(h,w)
# 计算短边需要增加多少像素宽度才能与长边等长(相当于pad
是跟.tex文件具有相同路径,所以直接写
图片
名称即可。
\includegraphics[width=1\linewidth]{graph_rela.png}
当前子文件夹下的
图片
是相对路径,写:文件夹名+
图片
名
\includegraphics[width=1\linewidth]{figures//graph_rela.png}
其他文件夹的
图片
可以采用绝对路径。
\includegraphics{D:/matlab/
im
age/zs.eps}
二、
图片
的导入部分
在 LaTeX 中插图,首先要生成 格式的
图片
,有三种方法:NOTE:如果 visio 画图保存为 pdf 出现失真,解决办法是先保存为
图片
,选择打印机,然后再用 shell 将 jpg 转换为 eps(第三种方法)
在导言区添加宏包:
将
图片
和自己的 文件放在同一目录下,向 LaTeX 插入代码:
解释一下每一句的功能:
图片
位置控制参数:
表示当前位置(here),也就是说
图片
将放在你设置的当前位置,但是如果这一页的空间不足以放下这个
图片
,此时
图片
会转到下一页;
顶端(top),此时优先
LaTeX插入
图片
时,常用的
图片
格式有:png, pdf, jpg, eps。以上四种
图片
格式各有优劣,其中最为显著的差异是清晰度和
图片
文件大小。在清晰度方面:eps是清晰度最高的,其次是pdf和png,最后是jpg。
图片
命名中不要出现中文字符、不要空格和其他特殊符号,建议只用英文字母、下划线和简单符号。
若
图片
格式不是以上四种,或者
图片
中空白边缘过多,可以用PS
进行
处理并转存为以上四种格式之一。
注意需要
裁剪
图片
中多余空白部分
0. 参数设置
htbp 选项用来指定插图的理想位置,这几个字母分.
我们需要用“usepackage”来引入“graphicx”宏包。
然后在文档中用includegraphics插入图像。
该命令的必选参数,用于指定需要插入的图像文件的文件名,其可选参数用于指定图像的缩放比例,旋转等。
当使用XeLaTeX编译时,graphicx宏包支持多种图像文件格式。
还可以使用graphicspath指定图像文件的搜索路径。将图像等资源文件
进行
分门别类管理。
(1)将
图片
存放的文件夹figures与pics
文章目录插入图像介绍
图片
的文件夹路径更改图像大小和旋转
图片
定位字幕、标签和参考字幕标签和交叉引用生成高分辨率和低分辨率图像参考LATEX单位和长度关于LATEX中的图像类型latexpdflatex矢量格式还是位图格式?
图像是大多数科学文献中必不可少的元素。LATEX提供了几个选项来处理图像并使它们看起来完全符合您的需要。在本文中,我们将解释如何以最常见的格式包含图像,如何缩小、放大和旋转它们,以及如何在文档中引用它们。
以下是有关如何导入
图片
的示例。
\usepackage{graphi
cut_item_
im
g_cv(file_name, in_
im
g_path, out_dir):
im
g =
cv2
.
im
read
(in_
im
g_path)...
直接上效果图,看看是否是你的需求
项目要求:给定
图片
,自动检测最小外接矩阵,并
裁剪
。
文章底部附上整个项目的代码,只需改动main函数的输入图像地址,就可得到本文陈列的所有效果图。
左1:根据
cv2
.findContours()找到多个轮廓,中间:根据最大轮廓原则选择最大的2个轮廓并求出相应最小外接矩阵,右1:根据外接矩阵提供的坐标
进行
裁剪
。
step1: 加载
图片
,转成灰度图,用Sobel算子计算x,y方向上的梯度,之后在x方向上减去y方向上的梯度,通过这个减法,我们留下具有高水平梯度和低垂直梯度的图
在这篇文章里我们聊一下
Python
实现
图片
裁剪
的两种方式,一种
利用
了Pillow,还有一种
利用
了
OpenCV
。两种方式都需要简单的几行代码,这可能也就是现在
Python
那么流行的原因吧。首先,我们有一张原始
图片
,如下图所示:然后,我们
利用
OpenCV
对其
进行
裁剪
,代码如下所示:
im
port
cv2
im
g=
cv2
.
im
read
("./data/cut/thor.jpg")print(
im
g.shap...