2020-04-02 13:35发布
透视变换实现鸟瞰图
fromimutilsimportperspective
fromskimage.filtersimportthreshold_local
importcv2
importimutils
importnumpyasnp
#边缘扫描
image=cv2.imread("chass2.jpeg")
w=image.shape[0]
h=image.shape[1]
ratio=image.shape[0]/500.0#比例
orig=image.copy()
image=imutils.resize(image,height=500)
#灰度转换及边缘查找
gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
gray=cv2.GaussianBlur(gray,(5,5),0)
edged=cv2.Canny(gray,75,200)#边缘检测
#只保留轮廓
cnts=cv2.findContours(edged.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)#通过边缘图像找到轮廓
cnts=cnts[0]ifimutils.is_cv2()elsecnts[1]#用以区分OpenCV2.4和OpenCV3
cnts=sorted(cnts,key=cv2.contourArea,reverse=True)[:5]#保留最大轮廓
forcincnts:
peri=cv2.arcLength(c,True)
approx=cv2.approxPolyDP(c,0.01*peri,True)#轮廓点
iflen(approx)==4:#表明找到四个轮廓点
screenCnt=approx
break
point1=screenCnt.reshape(4,2).astype(np.float32)
#point2=np.array([[0,0],[0,420],[297,420],[297,0]],dtype="float32")
point2=np.array([[104,58],[104,478],[401,478],[401,58]],dtype="float32")
#实际坐标点和提取的角点必须一一对应呀,
#point1=np.array([[308,230],[500,230],[308,640],[500,640]],dtype="float32")
#point2=np.array([[308,230],[500,230],[155,30],[835,30]],dtype="float32")
M=cv2.getPerspectiveTransform(point1,point2)
out_img=cv2.warpPerspective(image,M,(image.shape[0],700))
dst=cv2.perspectiveTransform(point2.reshape(1,4,2),M)
cv2.imshow("Original",image)
cv2.imshow("Scanned",cv2.resize(out_img,(image.shape[0],700)))
cv2.waitKey(0)
关键点是point2是实际世界中的坐标
Python可以说是这几门著名语言里最易理解的了,这就是Python的优点之一,相比较其他语言,PHP,Java,C C++ C#这些语言,
学测试吧,简单容易些
第一语言现在还是java比较好找工作,第二语言学Python或者是go语言都可以了解一下
一、模块介绍1. 定义:模块:本质就是.py结尾的python文件(文件名:test.py,对应的模块名:test)用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能)2. 语法:• import 语句当解释器遇到import语句,如果模块在当前的搜索路径就会被导入。...
PythonPython是一种面向对象的解释型计算机程序设计语言,具有丰富强大的库,常被称为胶水语言,能够把其他语言制作的各种模块轻松链接在一起。因此Python具有:简单易学、数据分析能力强的特点。很多科学家都会自学Python,进行科研数据分析,由此可见Python...
1、简单;2、易学;3、免费开源;4、自动内存管理;5、可以移植;6、解释性;7、面向对象;8、可扩展;9、丰富的第三方库
人工智能是未来发展的一种趋势,也是当下非常流行的行业,是一门包含十分广泛的科学,由不同的领域组合而成,比如说机器学习、计算机视觉等等,研究人工智能涉及的方方面面是非常复杂的,那么为什么说做人工智能使用python比较好呢?1、Python遵循简单、优雅...
Python 是脚本语言,也就是中间件语言,其内核仍然百是纯 c 的性能表达的,而主要性能消耗在脚本的实时编译上。度而对比c,同样的功能,python可以表达比c更加精炼,当然牺牲了一些性能。如果确实对某知个模组性能不满意,还可以使用 c 编写 Python 模块为其...
1、使用Python进行通用应用程序编程您可以使用Python创建命令行和跨平台GUI应用程序,并将它们部署为自包含的可执行文件。虽然Python不具有从脚本生成独立二进制文件的本机能力,但是可以使用诸如cx_Freeze和PyInstaller之类的第三方包来实现这一点。2、使用P...
⑴作为初学python的科班出身的小白,python非常简单,非常适合人类阅读。阅读一个良好的Python程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!Python的这种伪代码本质是它最大的优点之一。它使你能够专注于解决问题而不是去搞明白语言本身。 ...
原因一、Python是一种 面向对象的语言谁说程序员找不着对象?在Python里分分钟就可以写个新对象,不喜欢的话甚至还能删掉呢。编程语言两个非常重要的概念,即面向对象与面向过程。举个栗子,当你想吃火锅了,你有两个方式:1、自己出门去菜市场,讲价,买粉...
自学比较慢呢,最好找培训机构学习比较好,有老师指导你也知道怎么学
对于编程语言难与不难真不好下定论,当然相对于其他编程语言,python语言还是容易点。欢迎深入了解python语言。
java是静态类型编程语言python是动态类型java被市场认可和广泛使用三十余年了,比较成熟python近几年刚被市场认可和大量推广,热度比较高python的学习周期短于java
冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素...
最多设置5个标签!
透视变换实现鸟瞰图
fromimutilsimportperspective
fromskimage.filtersimportthreshold_local
importcv2
importimutils
importnumpyasnp
#边缘扫描
image=cv2.imread("chass2.jpeg")
w=image.shape[0]
h=image.shape[1]
ratio=image.shape[0]/500.0#比例
orig=image.copy()
image=imutils.resize(image,height=500)
#灰度转换及边缘查找
gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
gray=cv2.GaussianBlur(gray,(5,5),0)
edged=cv2.Canny(gray,75,200)#边缘检测
#只保留轮廓
cnts=cv2.findContours(edged.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)#通过边缘图像找到轮廓
cnts=cnts[0]ifimutils.is_cv2()elsecnts[1]#用以区分OpenCV2.4和OpenCV3
cnts=sorted(cnts,key=cv2.contourArea,reverse=True)[:5]#保留最大轮廓
forcincnts:
peri=cv2.arcLength(c,True)
approx=cv2.approxPolyDP(c,0.01*peri,True)#轮廓点
iflen(approx)==4:#表明找到四个轮廓点
screenCnt=approx
break
point1=screenCnt.reshape(4,2).astype(np.float32)
#point2=np.array([[0,0],[0,420],[297,420],[297,0]],dtype="float32")
point2=np.array([[104,58],[104,478],[401,478],[401,58]],dtype="float32")
#实际坐标点和提取的角点必须一一对应呀,
#point1=np.array([[308,230],[500,230],[308,640],[500,640]],dtype="float32")
#point2=np.array([[308,230],[500,230],[155,30],[835,30]],dtype="float32")
M=cv2.getPerspectiveTransform(point1,point2)
out_img=cv2.warpPerspective(image,M,(image.shape[0],700))
dst=cv2.perspectiveTransform(point2.reshape(1,4,2),M)
cv2.imshow("Original",image)
cv2.imshow("Scanned",cv2.resize(out_img,(image.shape[0],700)))
cv2.waitKey(0)
关键点是point2是实际世界中的坐标
相关问题推荐
Python可以说是这几门著名语言里最易理解的了,这就是Python的优点之一,相比较其他语言,PHP,Java,C C++ C#这些语言,
学测试吧,简单容易些
第一语言现在还是java比较好找工作,第二语言学Python或者是go语言都可以了解一下
一、模块介绍1. 定义:模块:本质就是.py结尾的python文件(文件名:test.py,对应的模块名:test)用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能)2. 语法:• import 语句当解释器遇到import语句,如果模块在当前的搜索路径就会被导入。...
PythonPython是一种面向对象的解释型计算机程序设计语言,具有丰富强大的库,常被称为胶水语言,能够把其他语言制作的各种模块轻松链接在一起。因此Python具有:简单易学、数据分析能力强的特点。很多科学家都会自学Python,进行科研数据分析,由此可见Python...
1、简单;2、易学;3、免费开源;4、自动内存管理;5、可以移植;6、解释性;7、面向对象;8、可扩展;9、丰富的第三方库
人工智能是未来发展的一种趋势,也是当下非常流行的行业,是一门包含十分广泛的科学,由不同的领域组合而成,比如说机器学习、计算机视觉等等,研究人工智能涉及的方方面面是非常复杂的,那么为什么说做人工智能使用python比较好呢?1、Python遵循简单、优雅...
Python 是脚本语言,也就是中间件语言,其内核仍然百是纯 c 的性能表达的,而主要性能消耗在脚本的实时编译上。度而对比c,同样的功能,python可以表达比c更加精炼,当然牺牲了一些性能。如果确实对某知个模组性能不满意,还可以使用 c 编写 Python 模块为其...
1、使用Python进行通用应用程序编程您可以使用Python创建命令行和跨平台GUI应用程序,并将它们部署为自包含的可执行文件。虽然Python不具有从脚本生成独立二进制文件的本机能力,但是可以使用诸如cx_Freeze和PyInstaller之类的第三方包来实现这一点。2、使用P...
⑴作为初学python的科班出身的小白,python非常简单,非常适合人类阅读。阅读一个良好的Python程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!Python的这种伪代码本质是它最大的优点之一。它使你能够专注于解决问题而不是去搞明白语言本身。 ...
原因一、Python是一种 面向对象的语言谁说程序员找不着对象?在Python里分分钟就可以写个新对象,不喜欢的话甚至还能删掉呢。编程语言两个非常重要的概念,即面向对象与面向过程。举个栗子,当你想吃火锅了,你有两个方式:1、自己出门去菜市场,讲价,买粉...
自学比较慢呢,最好找培训机构学习比较好,有老师指导你也知道怎么学
对于编程语言难与不难真不好下定论,当然相对于其他编程语言,python语言还是容易点。欢迎深入了解python语言。
java是静态类型编程语言python是动态类型java被市场认可和广泛使用三十余年了,比较成熟python近几年刚被市场认可和大量推广,热度比较高python的学习周期短于java
冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素...