让我们轻松地分析图像
环境
python == 3.8
情节== 4.10.0
scikit-image == 0.17.2
要求== 2.24.0
枕头== 7.2.0
matplotlib == 3.3.2
常见图像的处理
首先,我将使用枕头
1 2 3 4 5 6 7 8 9 10 11 | import matplotlib.pyplot as plt from PIL import Image import requests import io url = 'https://upload.wikimedia.org/wikipedia/commons/thumb/0/00/Crab_Nebula.jpg/240px-Crab_Nebula.jpg' img = Image.open(io.BytesIO(requests.get(url).content)) plt.figure(figsize=(5,5)) plt.subplot(111) plt.imshow(img) |
我能够使用通常的matplot显示图像
让我们将其设为黑色
1 2 3 4 5 | gray_img = img.convert('L') plt.figure(figsize=(5,5)) plt.subplot(111) plt.imshow(gray_img) |
图像对象可以使用convert
进行黑白显示
使用skimage和plotly进行图像处理
关于在图形上显示图像的好处是可以放大等。
1 2 3 4 5 | import plotly.express as px from skimage import io img_sk = io.imread('https://upload.wikimedia.org/wikipedia/commons/thumb/0/00/Crab_Nebula.jpg/240px-Crab_Nebula.jpg') fig = px.imshow(img_sk) fig.show() |
您也可以处理枕头上读取的图像
1 2 | fig = px.imshow(gray_img, color_continuous_scale='gray') fig.show() |
在图像中创建轮廓线
您可以将轮廓线添加到图像的亮度
等高线图为Z的值着色
从头到尾监控值
指定等高线的间隔,其大小为
通过使end和size相同,可以提取具有指定值的零件。
换句话说,可用于轮廓提取的
等。
1 2 3 4 5 6 | import plotly.graph_objects as go fig = px.imshow(gray_img, color_continuous_scale='gray') fig.add_trace(go.Contour(z=gray_img, showscale=True, contours=dict(start=0, end=30, size=30,coloring='lines'),line_width=1)) fig.show() |
1 2 3 4 5 6 7 8 9 10 | import plotly.express as px import plotly.graph_objects as go from skimage import data img_camera = data.camera() fig = px.imshow(img_camera, color_continuous_scale='gray') fig.add_trace(go.Contour(z=img_camera, showscale=False, contours=dict(start=0, end=70, size=70, coloring='lines'), line_width=2)) fig.show() |
通过绘图创建颜色通道的直方图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | from plotly.subplots import make_subplots from skimage import data img_sk.shape #(240, 240, 3) plt.imshow(img_sk) img_r = img_sk.copy() img_r[:, :, 1] = 0 img_r[:, :, 2] = 0 plt.imshow(img_r) img_g = img_sk.copy() img_g[:, :, 0] = 0 img_g[:, :, 2] = 0 plt.imshow(img_g) img_b = img_sk.copy() img_b[:, :, 0] = 0 img_b[:, :, 1] = 0 plt.imshow(img_b) |
非零到历史
1 2 3 4 5 6 7 8 9 | ff=go.Figure() ff.add_trace(go.Histogram(x=img_r.flatten()[img_r.flatten()!=0],marker_color='red',name='red')) ff.add_trace(go.Histogram(x=img_g.flatten()[img_g.flatten()!=0],marker_color='green',name='green')) ff.add_trace(go.Histogram(x=img_b.flatten()[img_b.flatten()!=0],marker_color='blue',name='blue')) ff.update_layout(barmode='overlay') ff.update_traces(opacity=0.3) ff.update_layout(height=400) ff.show() |
放大时,似乎主要是10或更少,所以请检查10或更多的分布
1 2 3 4 5 6 7 8 9 | ff=go.Figure() ff.add_trace(go.Histogram(x=img_r.flatten()[img_r.flatten()>10],marker_color='red',name='red')) ff.add_trace(go.Histogram(x=img_g.flatten()[img_g.flatten()>10],marker_color='green',name='green')) ff.add_trace(go.Histogram(x=img_b.flatten()[img_b.flatten()>10],marker_color='blue',name='blue')) ff.update_layout(barmode='overlay') ff.update_traces(opacity=0.3) ff.update_layout(height=400) ff.show() |
整齐地分成
黑白的确认如下
1 2 3 4 5 6 7 8 9 10 11 12 | from skimage.color import rgb2gray gray_img = rgb2gray(img_sk) ff=go.Figure() ff.add_trace(go.Histogram(x=gray_img.flatten()[gray_img.flatten()!=0],marker_color='pink',name='gray')) ff.update_layout(barmode='overlay') ff.update_traces(opacity=0.8) ff.update_layout(height=400) ff.show() |
1 2 3 4 5 6 7 | ff=go.Figure() ff.add_trace(go.Histogram(x=gray_img.flatten()[gray_img.flatten()>0.1],marker_color='pink',name='gray')) ff.update_layout(barmode='overlay') ff.update_traces(opacity=0.8) ff.update_layout(height=400) ff.show() |
顺便说一下,如何在图中显示图像
吸引图形的整个表面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import plotly.express as px fig = px.scatter(x=[0, 1, 2, 3, 4], y=[0, 1, 4, 9, 16]) fig.add_layout_image( dict( source="https://upload.wikimedia.org/wikipedia/commons/thumb/0/00/Crab_Nebula.jpg/240px-Crab_Nebula.jpg", xref="x", yref="y", x=0, y=16, sizex=4, sizey=15, sizing="stretch") ) fig.update_xaxes(title_text="picture No") fig.update_yaxes(title_text="view par day", hoverformat=".3f") fig.show() |
轻轻地在背面发出吸引力(下)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import plotly.express as px fig = px.scatter(x=[0, 1, 2, 3, 4], y=[0, 1, 4, 9, 16]) fig.add_layout_image( dict( source="https://upload.wikimedia.org/wikipedia/commons/thumb/0/00/Crab_Nebula.jpg/240px-Crab_Nebula.jpg", xref="x", yref="y", x=0, y=16, sizex=4, sizey=15, sizing="stretch", opacity=0.5, layer="below") ) fig.update_xaxes(title_text="picture No") fig.update_yaxes(title_text="view par day", hoverformat=".3f") fig.show() |
使其更小并添加一根棍子或添加文字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | import plotly.express as px fig = px.scatter(x=[0, 1, 2, 3, 4], y=[0, 1, 4, 9, 16]) fig.add_layout_image( dict( source="https://upload.wikimedia.org/wikipedia/commons/thumb/0/00/Crab_Nebula.jpg/240px-Crab_Nebula.jpg", xref="x", yref="y", x=1.68, y=16, sizex=3, sizey=3) ) fig.update_layout( annotations=[ dict( x=0.5, y=0.8, xref="paper", yref="paper", showarrow=True, arrowhead=0, opacity=0.5, ax=190, ay=100, )#, # dict(x=,y=,xref="paper",yref="paper",showarrow=True,arrowhead=0,opacity=0.5,ax=,ay=,) ] ) fig.update_xaxes(title_text="picture No") fig.update_yaxes(title_text="view par day", hoverformat=".3f") fig.show() |
图像的布局图像与图的位置一致
绘图的x和y轴对应于图像
的左上位置x和y
图像左下角的条形为0,0
中心是0.5,0.5
ax和ay代表钢筋的长度,并从指定位置x和y延伸到在x轴方向和y轴方向上延伸的钢筋的矢量合并位置
就这样
暂时可以移动的任何乐趣