导航:首页 > 编程语言 > python最小边缘切图

python最小边缘切图

发布时间:2022-08-02 01:11:44

A. python如何把检测出来的边缘画成矩形

__author__='Administrator'importcv

defSharp(image,flag1=0,flag2=0):
w=image.width
h=image.heightsize=(w,h)
iSharp=cv.CreateImage(size,8,1)foriinrange(h-1):forjinrange(w-1):ifflag2==0:
x=abs(image[i,j+1]-image[i,j])
y=abs(image[i+1,j]-image[i,j])else:
x=abs(image[i+1,j+1]-image[i,j])
y=abs(image[i+1,j]-image[i,j+1])ifflag1==0:
iSharp[i,j]=max(x,y)else:
iSharp[i,j]=x+yreturniSharpimage=cv.LoadImage('18.jpg',0)
iMaxSharp=Sharp(image)
iAddSharp=Sharp(image,1)
iRMaxSharp=Sharp(image,0,1)
iRAddSharp=Sharp(image,1,1)
cv.ShowImage('iMaxSharp',iMaxSharp)
cv.ShowImage('image',image)
cv.ShowImage('iAddSharp',iAddSharp)
cv.ShowImage('iRAddSharp',iRAddSharp)
cv.ShowImage('iRMaxSharp',iRMaxSharp)
cv.WaitKey(0)

B. 如何用python提取图像的边界坐标

简单说,两附图之间对应像素相减,然后求绝对值,差异大于某个特定值的就认为是不同点。(如果你的图片是jpg压缩,那么由于离散余弦变换过程去掉了高频信息,会导致图像颜色变化剧烈的部分出现细微锯齿状差异)
使用Numpy操作,np.abs(img1-img2)>thr。即可得到

C. python Tkinter编程问题

可以用这个frame的winfo_width()方法获得实际宽度,winfo_height()可以获得高度,比如:
fr=Frame(tk)
fr.pack(side=TOP, fill=BOTH, expand=True)
print "frame size before update: ", fr.winfo_width(), fr.winfo_height()
fr.update()
print "frame size after update: ", fr.winfo_width(), fr.winfo_height()

D. 如何用python取图片轮廓

1、查找轮廓(find_contours)

measure模块中的find_contours()函数,可用来检测二值图像的边缘轮廓。

函数原型为:

skimage.measure.find_contours(array,level)

array: 一个二值数组图像

level: 在图像中查找轮廓的级别值

返回轮廓列表集合,可用for循环取出每一条轮廓。

例1:

importnumpyasnp
importmatplotlib.pyplotasplt
fromskimageimportmeasure,draw

#生成二值测试图像
img=np.zeros([100,100])
img[20:40,60:80]=1#矩形
rr,cc=draw.circle(60,60,10)#小圆
rr1,cc1=draw.circle(20,30,15)#大圆
img[rr,cc]=1
img[rr1,cc1]=1

#检测所有图形的轮廓
contours=measure.find_contours(img,0.5)

#绘制轮廓
fig,(ax0,ax1)=plt.subplots(1,2,figsize=(8,8))
ax0.imshow(img,plt.cm.gray)
ax1.imshow(img,plt.cm.gray)
forn,contourinenumerate(contours):
ax1.plot(contour[:,1],contour[:,0],linewidth=2)
ax1.axis('image')
ax1.set_xticks([])
ax1.set_yticks([])
plt.show()

结果如下:不同的轮廓用不同的颜色显示

E. Python边缘提取如何拟合一条线

输入图像转为灰度图像 - 使用 Canny 进行边缘提取,得到二值图像 - 使用 findContours 寻找轮廓 - 使用 drawContours 绘制轮廓

F. 怎么用Python将图像边界用最小二乘法拟合成曲线

本文实例讲述了Python基于最小二乘法实现曲线拟合。分享给大家供大家参考,具体如下:

这里不手动实现最小二乘,调用scipy库中实现好的相关优化函数。

考虑如下的含有4个参数的函数式:

希望本文所述对大家Python程序设计有所帮助。

G. 为什么python是人工智能最好的语言

选择Python作为基于AI的项目有几个原因,从使用较少的代码到预构建的库。这就是为什么Python是AI和机器学习的好语言:
少代码
选择Python进行AI开发项目的一个主要优点是可以使用的代码更少。为了更好地理解这一点,与其他编程语言(如Java,Ruby和Simula)(第一种面向对象的编程语言)相比,Python可以使用通常所需的总代码量的五分之一来实现相同的逻辑。
虽然人工智能涉及多种算法,但Python提供的测试简易性使其成为竞争对手中最有效的编程语言之一。 Python使得执行所需代码变得更加容易,因此完成一项工作所需的时间更少。
灵活性
由于Python是一种动态类型语言,因此非常灵活。简而言之,这意味着没有“硬性规则”概述如何构建功能。
Python在解决问题方面也提供了更大的灵活性,这对于初学者和经验丰富的Web开发人员来说都很有用。
声望
除了最适合Web开发中的人工智能之外,由于语法比其他编程语言(如Java)更短,因此该语言易于学习。因此,Python在全球范围内越来越受欢迎,从小型企业到负责客户网站的营销机构。
它也很容易安装,并且根据Python软件基金会的说法,“现在很多Linux和UNIX发行版都包含最新的Python”,这使得它更容易上手。
预建库
无论您是经验丰富的Web开发人员还是被要求领导您的企业下一个AI开发项目,您都可以从Python的预构建库中受益。一些可以帮助您实现AI的库包括:
NumPy - 除了明显的科学用途外,NumPy还可以用作通用数据的高效多维容器。
Tensorflow - TensorFlow是一个用于高性能数值计算的开源软件库。其灵活的架构允许在各种平台(CPU,GPU,TPU),桌面,服务器集群,移动和边缘设备上轻松部署计算。
ELI5 - ELI5是一个Python包,它有助于调试机器学习分类器并解释它们的预测。
Pandas - Pandas是一个Python包,提供快速,灵活和富有表现力的数据结构,旨在使结构化(表格式,多维,可能异构)和时间序列数据的使用既简单又直观。
Theano - Theano是一个Python库,允许您定义,优化和有效地评估涉及多维数组的数学表达式。
其他库如Norvig可用于实现人工智能算法,有助于节省宝贵的时间。

H. python处理图片数据

目录

1.机器是如何存储图像的?

2.在Python中读取图像数据

3.从图像数据中提取特征的方法#1:灰度像素值特征

4.从图像数据中提取特征的方法#2:通道的平均像素值

5.从图像数据中提取特征的方法#3:提取边缘
是一张数字8的图像,仔细观察就会发现,图像是由小方格组成的。这些小方格被称为像素。

但是要注意,人们是以视觉的形式观察图像的,可以轻松区分边缘和颜色,从而识别图片中的内容。然而机器很难做到这一点,它们以数字的形式存储图像。请看下图:

机器以数字矩阵的形式储存图像,矩阵大小取决于任意给定图像的像素数。

假设图像的尺寸为180 x 200或n x m,这些尺寸基本上是图像中的像素数(高x宽)。

这些数字或像素值表示像素的强度或亮度,较小的数字(接近0)表示黑色,较大的数字(接近255)表示白色。通过分析下面的图像,读者就会弄懂到目前为止所学到的知识。

下图的尺寸为22 x 16,读者可以通过计算像素数来验证:

图片源于机器学习应用课程

刚才讨论的例子是黑白图像,如果是生活中更为普遍的彩色呢?你是否认为彩色图像也以2D矩阵的形式存储?

彩色图像通常由多种颜色组成,几乎所有颜色都可以从三原色(红色,绿色和蓝色)生成。

因此,如果是彩色图像,则要用到三个矩阵(或通道)——红、绿、蓝。每个矩阵值介于0到255之间,表示该像素的颜色强度。观察下图来理解这个概念:

图片源于机器学习应用课程

左边有一幅彩色图像(人类可以看到),而在右边,红绿蓝三个颜色通道对应三个矩阵,叠加三个通道以形成彩色图像。

请注意,由于原始矩阵非常大且可视化难度较高,因此这些不是给定图像的原始像素值。此外,还可以用各种其他的格式来存储图像,RGB是最受欢迎的,所以笔者放到这里。读者可以在此处阅读更多关于其他流行格式的信息。

用Python读取图像数据

下面开始将理论知识付诸实践。启动Python并加载图像以观察矩阵:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from skimage.io import imread, imshow
image = imread('image_8_original.png', as_gray=True)
imshow(image)

#checking image shape
image.shape, image

(28,28)

矩阵有784个值,而且这只是整个矩阵的一小部分。用一个LIVE编码窗口,不用离开本文就可以运行上述所有代码并查看结果。

下面来深入探讨本文背后的核心思想,并探索使用像素值作为特征的各种方法。

方法#1:灰度像素值特征

从图像创建特征最简单的方法就是将原始的像素用作单独的特征。

考虑相同的示例,就是上面那张图(数字‘8’),图像尺寸为28×28。

能猜出这张图片的特征数量吗?答案是与像素数相同!也就是有784个。

那么问题来了,如何安排这784个像素作为特征呢?这样,可以简单地依次追加每个像素值从而生成特征向量。如下图所示:

下面来用Python绘制图像,并为该图像创建这些特征:

image = imread('puppy.jpeg', as_gray=True)

image.shape, imshow(image)

(650,450)

该图像尺寸为650×450,因此特征数量应为297,000。可以使用NumPy中的reshape函数生成,在其中指定图像尺寸:

#pixel features

features = np.reshape(image, (660*450))

features.shape, features

(297000,)
array([0.96470588, 0.96470588, 0.96470588, ..., 0.96862745, 0.96470588,
0.96470588])

这里就得到了特征——长度为297,000的一维数组。很简单吧?在实时编码窗口中尝试使用此方法提取特征。

但结果只有一个通道或灰度图像,对于彩色图像是否也可以这样呢?来看看吧!

方法#2:通道的平均像素值

在读取上一节中的图像时,设置了参数‘as_gray = True’,因此在图像中只有一个通道,可以轻松附加像素值。下面删除参数并再次加载图像:

image = imread('puppy.jpeg')
image.shape

(660, 450, 3)

这次,图像尺寸为(660,450,3),其中3为通道数量。可以像之前一样继续创建特征,此时特征数量将是660*450*3 = 891,000。

或者,可以使用另一种方法:

生成一个新矩阵,这个矩阵具有来自三个通道的像素平均值,而不是分别使用三个通道中的像素值。

下图可以让读者更清楚地了解这一思路:

这样一来,特征数量保持不变,并且还能考虑来自图像全部三个通道的像素值。

image = imread('puppy.jpeg')
feature_matrix = np.zeros((660,450))
feature_matrix.shape

(660, 450)

现有一个尺寸为(660×450×3)的三维矩阵,其中660为高度,450为宽度,3是通道数。为获取平均像素值,要使用for循环:

for i in range(0,iimage.shape[0]):
for j in range(0,image.shape[1]):
feature_matrix[i][j] = ((int(image[i,j,0]) + int(image[i,j,1]) + int(image[i,j,2]))/3)

新矩阵具有相同的高度和宽度,但只有一个通道。现在,可以按照与上一节相同的步骤进行操作。依次附加像素值以获得一维数组:

features = np.reshape(feature_matrix, (660*450))
features.shape

(297000,)

方法#3:提取边缘特征

请思考,在下图中,如何识别其中存在的对象:

识别出图中的对象很容易——狗、汽车、还有猫,那么在区分的时候要考虑哪些特征呢?形状是一个重要因素,其次是颜色,或者大小。如果机器也能像这样识别形状会怎么样?

类似的想法是提取边缘作为特征并将其作为模型的输入。稍微考虑一下,要如何识别图像中的边缘呢?边缘一般都是颜色急剧变化的地方,请看下图:

笔者在这里突出了两个边缘。这两处边缘之所以可以被识别是因为在图中,可以分别看到颜色从白色变为棕色,或者由棕色变为黑色。如你所知,图像以数字的形式表示,因此就要寻找哪些像素值发生了剧烈变化。

假设图像矩阵如下:

图片源于机器学习应用课程

该像素两侧的像素值差异很大,于是可以得出结论,该像素处存在显着的转变,因此其为边缘。现在问题又来了,是否一定要手动执行此步骤?

当然不!有各种可用于突出显示图像边缘的内核,刚才讨论的方法也可以使用Prewitt内核(在x方向上)来实现。以下是Prewitt内核:

获取所选像素周围的值,并将其与所选内核(Prewitt内核)相乘,然后可以添加结果值以获得最终值。由于±1已经分别存在于两列之中,因此添加这些值就相当于获取差异。

还有其他各种内核,下面是四种最常用的内核:

图片源于机器学习应用课程

现在回到笔记本,为同一图像生成边缘特征:

#importing the required libraries
import numpy as np
from skimage.io import imread, imshow
from skimage.filters import prewitt_h,prewitt_v
import matplotlib.pyplot as plt
%matplotlib inline

#reading the image
image = imread('puppy.jpeg',as_gray=True)

#calculating horizontal edges using prewitt kernel
edges_prewitt_horizontal = prewitt_h(image)
#calculating vertical edges using prewitt kernel
edges_prewitt_vertical = prewitt_v(image)

imshow(edges_prewitt_vertical, cmap='gray')

阅读全文

与python最小边缘切图相关的资料

热点内容
theisle测试服怎么搜服务器 浏览:439
广播PDF 浏览:216
单片机编程300例汇编百度 浏览:33
腾讯云连接不上服务器 浏览:221
不能用来表示算法的是 浏览:859
6轴机器人算法 浏览:890
手机主题照片在哪个文件夹 浏览:294
安卓手机后期用什么软件调色 浏览:628
cad修改快捷键的命令 浏览:242
好钱包app怎么登录不了 浏览:859
树莓派都用python不用c 浏览:757
access文件夹树的构造 浏览:662
安卓多指操作怎么设置 浏览:658
linux树形目录 浏览:727
平方根的简单算法 浏览:898
千牛订单页面信息加密取消 浏览:558
单片机自制红外遥控灯 浏览:719
服务器最小配置怎么弄 浏览:853
ibm服务器硬件如何升级 浏览:923
全球程序员节点赞 浏览:986