- 博客(39)
- 收藏
- 关注
原创 meanshift 图像分割及漫水填充
//meanshift程序#include "opencv2/highgui/highgui.hpp" #include "opencv2/core/core.hpp" #include "opencv2/imgproc/imgproc.hpp" using namespace cv;using namespace std;int main(int argc, char** argv){ Mat src_img = imread("C:/Users/YP/Desktop/运行图片/
2021-05-12 16:36:30
284
原创 BM立体匹配算法的参数详解
BM参数// 预处理滤波参数preFilterType:预处理滤波器的类型,主要是用于降低亮度失真(photometric distortions)、消除噪声和增强纹理等, 有两种可选类型:CV_STEREO_BM_NORMALIZED_RESPONSE(归一化响应) 或者 CV_STEREO_BM_XSOBEL(水平方向Sobel算子,默认类型), 该参数为 int 型;preFilterSize:预处理滤波器窗口大小,容许范围是[5,255],一般应该在 5x5…21x21 之间,参数必须为奇数值
2021-04-09 14:29:31
2454
原创 双目相机灰色视差图转换成彩色视差图
#include <iostream>#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>using namespace std;using namespace cv;int main(int argc, char** argv){ Mat img = imread("C:\\Users\\YP\\Desktop\\4.png", 0); imsh
2021-04-07 20:36:35
798
原创 Win10 vs2017+Opencv4 配置contrib扩展
一.准备编译工具配置contrib需要CMake对Opencv进行编译,所以先进行准备工作:1.1 CMake下载安装下载链接: https://cmake.org/download/.找最新版本并且下载“msi”文件。下载完成之后直接安装即可,注意其中这一步选择addCmake to the system PATH for the current user这个选项如果没有选择安装桌面快捷方式的,在这里找启动图标:1.2 opencv_contrib下载安装下载链接: https://gi
2021-03-29 21:53:34
392
原创 图像颜色均衡
图像均衡(直方图均衡化)试图获得均匀分布的直方图。均衡的结果是图像对比度增加。均衡能够使对比度较低的局部区域获得高对比度。从而分散最频繁的强度。当图像特别亮的时候或者非常暗的时候,并且背景和前景存在非常小的差异,此方法非常有用。通过直方图均衡化,可以增加对比度提升暴露过度或暴露不足的细节。然而,这种方法也存在缺点:背景噪声的增加以及随即而来的有用信号的减少。import cv2import numpy as npimg = cv2.imread(r'C:\Users\YP\Desktop\...
2021-03-26 09:19:02
455
原创 C++与opencv canny算法、膨胀填充
#include <stdio.h>#include <opencv2/opencv.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <iostream>#include <vector>using namespace std;#define zoom 1// 缩放因子, 将大图像缩小 n 倍显
2021-03-23 21:05:33
511
原创 双目相机SGBM算法参数
1.minDisparity 最小可能的视差值。通常为零,但有时校正算法会偏移图像,因此需要相应地调整此参数。2.numDisparities 最大视差减去最小视差。该值始终大于零。在当前的实现中,此参数必须可被16整除。3.P1 控制视差平滑度的第一个参数。此参数用于倾斜表面(非正视平行)的情况。4.P2 第二个参数控制视差平滑度。此参数用于“解决”深度不连续性问题。值越大,视差越平滑。P1是对相邻像素之间视差变化加或减1的惩罚。P2是相邻像素之间视差变化大于1的代价。该算法要求P2> P1。
2021-03-19 19:05:14
2190
原创 VS2017与opencv 4.1.0环境配置(win10)
1.官方网站下载 vs2017年的链接: https://visualstudio.microsoft.com/zh-hans/.下载完成进行安装即可。2.选上Windows中的“.NET桌面开发”和“使用C++的桌面开发”以及最下面其他工具集中的“Visual Studio扩展开发”即可。选好路劲之后右下角点击“安装”即可。安装完了之后可能会需要重启电脑,重启完毕后打开VS2017, 开发设置选择C++。3.Opencv4.0 安装官方下载链接: https://opencv.org/rel
2021-03-18 12:43:48
286
原创 双目相机视差图转换成深度图
视差的单位是像素(pixel),深度的单位往往是毫米(mm)表示。而根据平行双目视觉的几何关系,可以得到下面的视差与深度的转换公式:depth = ( f * baseline) / dispdepth表示深度图;f表示归一化的焦距,也就是内参中的fx; baseline是两个相机光心之间的距离,称作基线距离;disp是视差值。代码:void disp2Depth(cv::Mat dispMap, cv::Mat &depthMap, cv::Mat K){ int type =
2021-03-16 20:29:34
9516
7
原创 Matlab—双目标定
双目标定1.将下载好双目标定图片到 D 盘根目录,右键选择:解压到当前文件夹,解压后路径为:d:\stereo_example。 在 Matlab 命令行窗口输入并执行:cd d:\stereo_example,当前文件目录被设置为d:\stereo_example。 在 Matlab 命令行窗口输入并执行:stereo_gui2.在标定工具箱界面,点击:Load left and right calibration files,在 Matlab 命令行窗口 2 次按下回车键:3.Matlab 命
2020-12-03 21:57:56
746
原创 左目与右目图像分别实时显示及抓拍
棋盘格图像拍摄■ 推荐使用专业棋盘格,也可用 A3 纸打印棋盘格图片并粘贴在玻璃等平整面(打印时需要确保原比例,以防拉伸棋盘格图像;粘贴的平整度有限,该方式仅限于实验测试)。■ 拍摄时,标定板要尽量放置在靠近实际拍摄目标物的位置,且标定板在图像中尽量占据 1/3 以上像素面积。一般而言,除近距离应用外,标定板越大越好。■ 拍摄时,标定板在左目及右目图像的位置要尽量靠近各自图像中心。■ 进行单目标定时,标定工具箱默认不大于 20 张棋盘格图像(推荐使用 10-20张图片用于标定)。可运行 VS + O
2020-12-02 12:37:07
926
原创 Matalab— 单目标定(手动)
Matlab 单目标定1.在 Matlab 命令行窗口输入并执行:cd C:\pic-左(输入命令后,按下回车键执行命令),当前文件目录被设置为 C:\pic-左,根据自己拍摄的图片路径来执行的。2.在 Matlab 命令行窗口输入并执行:calib_gui3.点击:Standard(all the images are stored in memory),弹出如下界面:4.点击标定工具箱界面:Image names,在 Matlab 命令行窗口输入并执行:Left,(这里是根据自己图片的命名来输
2020-11-30 10:22:51
1956
1
原创 Matlab-双目标定(自动标定)
流程1.网上找棋盘格进行拍照2.拍照棋盘格(运用代码)将拍好的图片分为两个文件夹,左目一个文件夹,右目一个文件夹。3.打开matlab进行标定有手动标定,也有自动标定,本文讲一下自动标定。(1)在matlab命令界面输入stereoCameraCalibrator,也可以在菜单里找到APP ——图像处理和计算机视觉—— 再点击stereoCameraCalibrator。(2)加载图像点击菜单栏里“Add Images”图标弹出窗口:分别选择存放左右两个摄像机图片的文件夹,“Si
2020-11-29 14:48:36
1425
2
原创 双目相机的三维重建
双目相机的三维重建一.步骤摄像机的标定(内参和外参)双目图像的标定(张正友标定法)立体匹配算法获得视差图生成深度图进行三维重建二.详细过程1.摄像机的标定内参,摄像机内参反映的是摄像机坐标系到图像坐标系之间的投影关系。摄像机内参的标定使用张正友标定法,简单易操作。去网上找棋盘格,从不同角度用双目相机进行拍摄,建议20张左右。然后运用Maltab进行标定。外参,摄像机外参反映的是摄像机坐标系和世界坐标系之间的旋转R和平移T关系。如果两个相机的内参均已知,并且知道各自与世界坐标系之间的R
2020-11-29 14:04:17
3467
1
原创 Python-读取文件
6 文件与异常6.1 读取文件#文件在计算机中的准确位置告诉Python,这样就不用关心当前运行的程序存储在什么地方了。这称为绝对文件路径。#相对文件路径让Python到指定的位置去查找,而该位置是相对于当前运行的程序所在目录的。# 从文件中逐行读取:students = [] # 创建一个空列表用来存放学生信息。# 使用with打开文件,Python会在合适的时候自动关闭该文件,不需要程序员显式地调用close函数,推荐使用with。open() 将会返回一个 file 对象with op
2020-11-29 13:28:12
497
原创 python-name属性
name 属性"""一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的 python 脚本中被调用(模块重用)执行。因此 if __name__ == 'main': 的作用就是控制这两种情况执行代码的过程,在 if __name__ == 'main': 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而 import 到其他脚本中是不会被执行的。"""if __name__ == '__main__': print('程序自身在运行
2020-11-27 14:18:42
704
1
原创 python-导入类或者模块
5.3 导入类或者模块#可根据需要在程序文件中导入任意数量的类。如果我们要在同一个程序中创建普通汽车和电动汽车,就需要将Car和ElectricCar类都导入:#这里jupyter-notebook不方便演示,可用pycharmfrom car import Car, ElectricCar #你还可以导入整个模块,再使用句点表示法访问需要的类。import carmy_beetle = car.Car('volkswagen', 'beetle', 2016) #要导入模块中的每个类,可
2020-11-26 14:20:31
272
原创 python-继承
5.2 继承#创建子类时,父类必须包含在当前文件中,且位于子类前面。在处,我们定义了子类ElectricCar。定义子类时,必须在括号内指定父类的名称。方法__init__()接受创建Car实例所需的信息。class Car: def __init__(self, make, model, year): self.make = make self.model = model self.year = year self.odomete
2020-11-25 16:20:17
172
原创 Python--类
5.1 类class Person: # __xx__是特殊方法,构造实例的时候Python自动调用,请注意是双下划线。 def __init__(self, name, age): '''初始化属性。''' self.name = name self.age = age def __str__(self): return 'Name: ' + self.name + ', Age: ' +
2020-11-24 15:39:47
106
原创 Python-类的构造
5 类5.1 类的构造# 定义Dog类,类名一般首字母大写。#方法__init__()是一个特殊的方法,请注意是双下划线。每当你根据Dog类创建新实例时,Python都会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线,这是一种约定,旨在避免Python默认方法与普通方法发生名称冲突。#类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。以self为前缀的变量都可供类中的所有方法使用,我们还可以通过类的任何实例来访问这些变量。cla
2020-11-23 14:14:29
645
原创 Python-input函数
4.6 input函数# input函数为python系统函数。name = input("Please enter your name: ")print("Hello, " + name.title() + "!")age = input("How old are you? ") # age is a string.age = int(age) # Now age is an integer.if age >= 12 and age < 60: print('You
2020-11-22 15:29:31
418
原创 Python-全局变量与局部变量
4.5 全局变量与局部变量# 根据变量定义的位置,变量分为:# 局部变量:在函数中定义的变量和参数。# 全局变量:在函数外面,全局范围内定义的变量。name1 = 'Alice' # 全局变量name2 = 'Bob'name3 = 'Charlie'def test(name1): name2 = 'Zhang San' # 局部变量,屏蔽了同名的全局变量 name4 = 'Li Si' # 局部变量 print('---- In test() ----'
2020-11-21 11:37:11
100
原创 Python-函数参数传递机制
4.4 函数参数传递机制# 注:函数参数传递机制的值传递实际上就是将实际参数值的副本(复制品)传入函数,而参数本身不会受到任何影响。# (1)Python函数的参数传递机制是 值传递。def swap(a, b): a,b = b,a print("In swap(): a = ", a, " b = ", b)a = 3b = 7print("Before swap(): a = ", a, " b = ", b)swap(a, b)print("After swap()
2020-11-20 11:46:09
156
原创 Python-return函数
4.3 return# 返回一个数值的函数:def fibonacci(n): '''Given a number n, return F(n). Param: n must be a positive integer. ''' f_series = [1, 1] i = 2 while i <= n: f_series.append(f_series[i-2] + f_series[i-1]) i += 1
2020-11-19 15:09:57
558
原创 Python-函数
4 函数4.1无参数的函数def greet_user(): '''显示简单的问候语。 三个引号可用于多行注释。 ''' # 注意缩进。 print('Hello') # 对函数的调用:greet_user()4.2 形参与实参# 有一个参数的函数:# 函数定义中的参数叫做:形参def greet_user(user_name): '''参数user_name必须是一个字符串。 ''' # 注意缩进。 prin
2020-11-18 14:31:34
319
原创 Python-循环语句
3.2 循环语句f_series = [1,1]n = 2while n < 10: f_series.append(f_series[n-2] + f_series[n-1]) n += 1 print(f_series)#while后面跟布尔表达式。循环体中一定要有语句使得该布尔表达式最终为False,否则就退不出循环了。#例外:循环体中另有break语句。输出结果3.2.1breakf_series = [1,1]n=2while True:
2020-11-17 15:58:03
131
原创 Python-语句
3.1 判断语句age = 19if age >= 18:print(‘You are old enough to vote!’)print(‘Have you registered to vote yet?’)#注意:if后面跟布尔表达式(值只能是True或False)。注意:号和缩进。3.1.1 if-else语句#if-else:age = 17if age >= 18:print(‘You are old enough to vote!’)print(‘Have y
2020-11-16 10:55:46
68
原创 python-嵌套
1.代码#另一个例子:favorite_languages ={‘jean’:[‘python’,‘ruby’],‘sarah’:[‘c’],‘edward’:[‘ruby’,‘go’],‘phil’:[‘python’,‘haskell’]}for name,languages in favorite_languages.items():print(’\n’+name.title()+"‘s favorite languages are:")for language in langua
2020-11-15 10:35:26
66
原创 Python-嵌套
1.代码#嵌套#可以在列表中嵌套字典#在字典中嵌套列表甚至在字典中嵌套字典。#字典列表:person0 = {‘name’:‘alice’,‘age’:20}person1 = {‘name’:‘bob’,‘age’:22}person2 = {‘name’:‘bob’,‘age’:23}persons =[person0,person1,person2]for p in persons:print(‘name’,p[‘age’])#在字典中存储列表pizza ={‘crust’:
2020-11-15 09:35:14
136
原创 Python-字典
1.代码#字典是一系列key-value对#这是一个空字典:person ={}#i’o’i’jio’j 这也是一个空字典:person = dict()#这个字典定义了两个key-value对。person ={‘name’:‘Alice’,‘age’:25}print('Your name is '+person[‘name’])#‘Alice’print('Your age is '+ str(person[‘age’]))#25#向字典添加更多的key-value对。perso
2020-11-13 20:14:52
79
原创 Python-集合
1.代码#元祖的遍历for d in dimensions:print(d)#集合set是不重复元素的无顺序集合。#这是一个空集合:fruit = set() #不能用 fruit +{} 构造一个空集合,为什么?#这个集合有几个元素?fruit={‘apple’,‘orange’,‘apple’,‘pear’,‘orange’,‘bannana’}print(‘set fruit contains’+ str(len(fruit))+‘elements.’)#像集合添加元素:frui
2020-11-12 16:55:53
105
原创 python-列表
1.代码#组织列表#排序:persons = [‘Charlie’,‘Bob’,‘Alice’,‘David’]#临时排序,原列表不变,返回一个排序后的新列表。sorted_persons = sorted(persons)print(persons)#永久排序,原列表将会修改persons.sort()print(persons)#函数len()获取列表长度print(len(persons))#遍历列表:第一种方法:直接遍历列表persons = [‘Charlie’,‘Bob
2020-11-11 21:46:43
245
1
原创 Python-列表的基本操作
1.代码“”“这是注释”""#列表的基本操作#构造列表persons=[‘Alice’,‘Bob’‘Charlie’,‘David’] #包含四个元素的列表print(‘初始列表:’)print(persons)#将区间转换成列表:num_list = list(range(1,10))print(num_list)#访问列表#索引从0开始。print(‘第一个元素:’)print(persons[0])倒数第一个。print(‘倒数第一个元素:’)print(persons
2020-11-10 17:19:33
1040
原创 python-数字
1.代码#整数的四则运算print(3+2)print(3-2)print(3*2)print(3/2)#浮点数的四则运算print(0.3+0.2)print(0.3-0.2)print(0.3*0.2)print(0.3/0.2)#转换为字符串,使用函数 str()避免类型错误age=24message =‘Happy’ + age + ‘th Birthday’message =‘Happy’ + str(age)+‘th Birthday’print(message)
2020-11-09 21:05:43
120
原创 python-字符串
字符的转义#\n 换行符#\t 制表符#\“ 双引号#\‘ 单引号#\ 反斜线s = ‘Hello\tCharlie\nGood\tMorning’print(s)字符串的格式化:price = 100print(‘The price of this book is %s’%price)#%s会自动调用 str(price)print(‘The price of this book is %4.2f’% price )字符串的索引:s = ‘hello world’print (
2020-11-08 16:58:33
130
原创 python-字符串
1.3 字符串#%%#字符串必须用引号括起,单双引号都可以。print(‘I told my friend, “Python is my favorite language!”’)print(“What’s the weather now?”)#%%
2020-11-07 21:01:48
78
原创 python-字符串
用+连接字符串代码First_name= ‘Ada’last_name=‘Lovelace’full_name=first_name + ‘ ’ +last_nameprint('Hello,'full_name)2.输入代码3.输出结果
2020-11-07 20:39:22
76
原创 python-变量
1.2 变量#变量名只能包含字母、数字和下划线。#变量名可以字母或下划线打头,但不能以数字打头。#变量名不能包含空格。#不要将Python关键字和函数名用作变量名,即不要使用Python保留用于特殊用途的单词,如print。#赋予变量新的值,新的值就覆盖了旧的值。1.代码实例#message=‘Hello,python!’print(message)2.输入3.输出结果...
2020-11-05 19:59:11
91
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人