저장된 이미지 주위의 공백 제거
사진을 찍어서 저장해야 해요.그림을 표시했을 때는 정상으로 보이지만, 그림을 저장하면 이미지 주위에 공백이 생겼습니다.나는 그 일을 시도했다.'tight'
에 대한 선택권.savefig
메서드도 작동하지 않았습니다.코드:
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
fig = plt.figure(1)
img = mpimg.imread("image.jpg")
plt.imshow(img)
ax = fig.add_subplot(1, 1, 1)
extent = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
plt.savefig('1.png', bbox_inches=extent)
plt.axis('off')
plt.show()
Network X를 그림 위에 사용하여 기본 그래프를 그려서 저장하려고 합니다.그래프가 없으면 동작하지만 그래프를 추가하면 저장된 이미지 주위에 공백이 생깁니다.
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
import networkx as nx
G = nx.Graph()
G.add_node(1)
G.add_node(2)
G.add_node(3)
G.add_edge(1, 3)
G.add_edge(1, 2)
pos = {1:[100, 120], 2:[200, 300], 3:[50, 75]}
fig = plt.figure(1)
img = mpimg.imread("image.jpg")
plt.imshow(img)
ax = fig.add_subplot(1, 1, 1)
nx.draw(G, pos=pos)
extent = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
plt.savefig('1.png', bbox_inches=extent)
plt.axis('off')
plt.show()
설정별로 빈 공간 채우기를 제거할 수 있습니다.bbox_inches="tight"
에savefig
:
plt.savefig("test.png",bbox_inches='tight')
당신은 의론을 제기해야 할 것이다.bbox_inches
그래서 더 일찍 효과가 없었던 것 같아요.
중복 가능성:
matplotlib 그림의 여백을 설정하려면 어떻게 해야 합니다.
matplotlib 그림에서 왼쪽 및 오른쪽 여백 감소
"솔루션"이 왜 또는 어떻게 기능하는지 정확히 알고 있다고는 할 수 없지만, 몇 개의 에어로 오일 섹션의 윤곽을 흰색 여백 없이 PDF 파일로 표시하려고 할 때 이 작업을 수행해야 했습니다(IPython 노트북에서 -pylab 플래그를 사용하여 matplotlib를 사용했습니다).
plt.gca().set_axis_off()
plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0,
hspace = 0, wspace = 0)
plt.margins(0,0)
plt.gca().xaxis.set_major_locator(plt.NullLocator())
plt.gca().yaxis.set_major_locator(plt.NullLocator())
plt.savefig("filename.pdf", bbox_inches = 'tight',
pad_inches = 0)
다른 부분을 비활성화하려고 했지만 항상 어딘가에 흰 마진이 생깁니다.이 값을 수정하여 수치 한계 부근의 뚱뚱한 선이 여백 부족으로 인해 깎이지 않도록 할 수도 있습니다.
위의 답변(및 많은 다른 스택 포스트)을 시도했지만 성공하지 못한 후, 결국 제게 효과가 있었던 것은
plt.gca().set_axis_off()
plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0,
hspace = 0, wspace = 0)
plt.margins(0,0)
plt.savefig("myfig.pdf")
중요한 것은 여기에는 bbox 인수나 padding 인수는 포함되지 않습니다.
Arvind Pereira(http://robotics.usc.edu/~amperir/wordpress/?p=626)에서 뭔가 발견했고, 나에게 맞는 것 같았다.
plt.savefig(filename, transparent = True, bbox_inches = 'tight', pad_inches = 0)
다음 기능에는 위의 요하네스 답변이 포함되어 있습니다.로 테스트했습니다.plt.figure
그리고.plt.subplots()
여러 개의 축이 있고 잘 작동합니다.
def save(filepath, fig=None):
'''Save the current image with no whitespace
Example filepath: "myfig.png" or r"C:\myfig.pdf"
'''
import matplotlib.pyplot as plt
if not fig:
fig = plt.gcf()
plt.subplots_adjust(0,0,1,1,0,0)
for ax in fig.axes:
ax.axis('off')
ax.margins(0,0)
ax.xaxis.set_major_locator(plt.NullLocator())
ax.yaxis.set_major_locator(plt.NullLocator())
fig.savefig(filepath, pad_inches = 0, bbox_inches='tight')
가장 간단한 방법은 다음과 같습니다.plt.tight_layout
사용할 때 불필요한 크롭을 하지 않기 때문에 실제로 더 선호되는 변환plt.savefig
import matplotlib as plt
plt.plot([1,2,3], [1,2,3])
plt.tight_layout(pad=0)
plt.savefig('plot.png')
그러나 이 값은 그림을 수정하는 복잡한 그림에는 적합하지 않을 수 있습니다.에서 사용하는 요하네스 S의 답변을 참조해 주세요.plt.subplots_adjust
만약 그렇다면.
나는 다음 코드가 그 일에 딱 들어맞는다는 것을 알았다.
fig = plt.figure(figsize=[6,6])
ax = fig.add_subplot(111)
ax.imshow(data)
ax.axes.get_xaxis().set_visible(False)
ax.axes.get_yaxis().set_visible(False)
ax.set_frame_on(False)
plt.savefig('data.png', dpi=400, bbox_inches='tight',pad_inches=0)
은 나에게 가 있었다.plt.savefig(save_path,bbox_inches='tight', pad_inches=0, transparent=True)
이 순서를 따라 했더니 잘 되더라고요.
plt.axis("off")
fig=plt.imshow(image array,interpolation='nearest')
fig.axes.get_xaxis().set_visible(False)
fig.axes.get_yaxis().set_visible(False)
plt.savefig('destination_path.pdf',
bbox_inches='tight', pad_inches=0, format='pdf', dpi=1200)
제가 발견한 훨씬 간단한 접근법은plt.imsave
:
import matplotlib.pyplot as plt
arr = plt.imread(path)
plt.imsave('test.png', arr)
인치가 아닌 픽셀 단위로 작업하고 싶은 사람에게는 이 방법이 적합합니다.
또, 통상적인 것도 필요
from matplotlib.transforms import Bbox
그런 다음 다음을 사용할 수 있습니다.
my_dpi = 100 # Good default - doesn't really matter
# Size of output in pixels
h = 224
w = 224
fig, ax = plt.subplots(1, figsize=(w/my_dpi, h/my_dpi), dpi=my_dpi)
ax.set_position([0, 0, 1, 1]) # Critical!
# Do some stuff
ax.imshow(img)
ax.imshow(heatmap) # 4-channel RGBA
ax.plot([50, 100, 150], [50, 100, 150], color="red")
ax.axis("off")
fig.savefig("saved_img.png",
bbox_inches=Bbox([[0, 0], [w/my_dpi, h/my_dpi]]),
dpi=my_dpi)
따라서 솔루션은 하위구를 조정하는지 여부에 따라 달라집니다.plt.subplots_adjust(위, 아래, 오른쪽, 왼쪽)를 지정하면 역설적으로 공백 패딩이 생성되므로 bbox_subplots='tight'의 kwargs를 plt.savefig와 함께 사용할 필요가 없습니다.또, 입력 이미지와 같은 DIM으로 이미지를 보존할 수 있습니다(600 x 600 의 입력 이미지는 600 x 600 픽셀의 출력 이미지로 보존됩니다).
출력 이미지 크기 일관성에 관심이 없는 경우 plt.subplots_adjust 속성을 생략하고 bbox_subplots='tight' 및 pad_subplots=0 kwargs를 plt.savefig와 함께 사용할 수 있습니다.
이 솔루션은 matplotlib 버전 3.0.1, 3.0.3 및 3.2.1에서 작동합니다.둘 이상의 하위구(예: plt.subplots(2,2,...))가 있는 경우에도 사용할 수 있습니다.
def save_inp_as_output(_img, c_name, dpi=100):
h, w, _ = _img.shape
fig, axes = plt.subplots(figsize=(h/dpi, w/dpi))
fig.subplots_adjust(top=1.0, bottom=0, right=1.0, left=0, hspace=0, wspace=0)
axes.imshow(_img)
axes.axis('off')
plt.savefig(c_name, dpi=dpi, format='jpeg')
이거 드셔보세요.내 문제는 해결됐어
import matplotlib.image as mpimg
img = mpimg.imread("src.png")
mpimg.imsave("out.png", img, cmap=cmap)
Jupyter 노트북에서는 다음 행을 추가할 수 있습니다.
%config InlineBackend.print_figure_kwargs = {'pad_inches':0}
최소한의 예를 다음에 제시하겠습니다.
import matplotlib.pyplot as plt
import numpy as np
%config InlineBackend.print_figure_kwargs = {'pad_inches':0}
fig, ax = plt.subplots()
ax.axis("off")
ax.imshow(np.fromfunction(lambda i, j: np.sin(j), (15, 15)), cmap="YlGnBu")
이것은 imshow와 함께 플롯된 numpy 배열을 파일에 저장하는 데 도움이 됩니다.
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(10,10))
plt.imshow(img) # your image here
plt.axis("off")
plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0,
hspace = 0, wspace = 0)
plt.savefig("example2.png", box_inches='tight', dpi=100)
plt.show()
언급URL : https://stackoverflow.com/questions/11837979/removing-white-space-around-a-saved-image
'IT' 카테고리의 다른 글
MySQL에서 동일한 테이블에 행 삽입 (0) | 2022.10.19 |
---|---|
Vue.js에서 새로운 무효 속성 설정 (0) | 2022.10.19 |
시스템인 이유Java 네이티브 어레이 복사 (0) | 2022.10.19 |
Python 문자열에서 \xa0을 삭제하는 방법 (0) | 2022.10.19 |
두 열의 조합을 위한 양방향 고유 키 제약 조건 (0) | 2022.10.19 |