精华内容
下载资源
问答
  • 由于本人太穷,根本搞不起较好的双目相机,于是借用opencv自带图片。安装opencv后,在opencv\sources\samples\data下,有官方自带的图片,包括左右相机01-14(没有10)共26张双目相机照片,就以他们为例。 打开...

    前言:虽然计算三维坐标已经很多大佬研究过了,但是网上能用的好少啊。原理不多解释了,直接上程序。

    1.导入库

    import numpy as np
    import cv2

    包括矩阵处理和图像处理的两个基本库

    2.相机参数设置

    由于本人太穷,根本搞不起较好的双目相机,于是借用opencv自带的图片。安装opencv后,在opencv\sources\samples\data下,有官方自带的图片,包括左右相机01-14(没有10)共26张双目相机照片,就以他们为例。

    打开matlab进行双目相机标定(或者用opencv进行标定),由于未知标定板大小,据官方文件,其标定板可能是10mm*10mm(因为他默认大小参数是1.0,所以我猜是10mm,如有错误请大佬指出;其次,标定板大小只影响旋转和平移矩阵,对内参没影响)标定结果如下:

    # 左/右相机内参数、旋转、平移矩阵
    leftIntrinsic = np.array([[533.9634, 0, 342.6315],
                              [0, 533.9448, 234.3696],
                              [0, 0, 1]])
    leftRotation = np.array([[1, 0, 0],
                             [0, 1, 0],
                             [0, 0, 1]])
    leftTranslation = np.array([[0],
                                [0],
                                [0]])
    rightIntrinsic = np.array([[537.6219, 0, 326.7537],
                               [0, 537.2332, 250.4047],
                               [0, 0, 1]])
    rightRotation = np.array([[1, -0.0033, -0.0055],
                              [0.0033, 1, 0.0094],
                              [0.0054, -0.0094, 0.9999]])
    rightTranslation = np.array([[-33.2347],
                                 [0.4254],
                                 [0.0085]])

    matlab中,我只设置了三参数模型,标定板大小为10mm,其他默认,点击Calibrate。matlab操作不多介绍。

    以左相片建立空间坐标系,所以左相机旋转和平移矩阵为单位矩阵和零矩阵。右相机的旋转和平移矩阵使用两相机间的旋转和平移矩阵。

    3.函数编写

    # 函数参数为左右相片同名点的像素坐标,获取方式后面介绍
    # lx,ly为左相机某点像素坐标,rx,ry为右相机对应点像素坐标
    def uvToXYZ(lx, ly, rx, ry):
        mLeft = np.hstack([leftRotation, leftTranslation])
        mLeftM = np.dot(leftIntrinsic, mLeft)
        mRight = np.hstack([rightRotation, rightTranslation])
        mRightM = np.dot(rightIntrinsic, mRight)
        A = np.zeros(shape=(4, 3))
        for i in range(0, 3):
            A[0][i] = lx * mLeftM[2, i] - mLeftM[0][i]
        for i in range(0, 3):
            A[1][i] = ly * mLeftM[2][i] - mLeftM[1][i]
        for i in range(0, 3):
            A[2][i] = rx * mRightM[2][i] - mRightM[0][i]
        for i in range(0, 3):
            A[3][i] = ry * mRightM[2][i] - mRightM[1][i]
        B = np.zeros(shape=(4, 1))
        for i in range(0, 2):
            B[i][0] = mLeftM[i][3] - lx * mLeftM[2][3]
        for i in range(2, 4):
            B[i][0] = mRightM[i - 2][3] - rx * mRightM[2][3]
        XYZ = np.zeros(shape=(3, 1))
        # 根据大佬的方法,采用最小二乘法求其空间坐标
        cv2.solve(A, B, XYZ, cv2.DECOMP_SVD)
        print(XYZ)
        return XYZ

    4.同名点的确定与空间坐标的检验

    同名点是指左右相片对应的匹配点,在空间坐标中指的是同一个点,下面用opencv相机标定的方法输出并保存标定板上各个点的坐标。

    # 导入库,包括opencv和openpyxl(excel操作库,安装方法:pip install openpyxl)
    import cv2
    import openpyxl
    import os
    
    # 两张图片位置,这里选择left01和right01两张,位置自行更改
    img1 = cv2.imread('D:/SA/2021.3/6.1/l/left01.jpg')
    img2 = cv2.imread('D:/SA/2021.3/6.1/r/right01.jpg')
    criteria = (cv2.TERM_CRITERIA_MAX_ITER | cv2.TERM_CRITERIA_EPS, 30, 0.001)
    gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
    gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
    # 标定板角点检测
    ret1, corners1 = cv2.findChessboardCorners(gray1, (6, 9), None)
    ret2, corners2 = cv2.findChessboardCorners(gray2, (6, 9), None)
    # 亚像素角点检测,使其角点精度更高(反正我觉得没高多少)
    corners11 = cv2.cornerSubPix(gray1, corners1, (5, 5), (-1, -1), criteria)
    corners21 = cv2.cornerSubPix(gray2, corners2, (5, 5), (-1, -1), criteria)
    # 将数据保存到excel中,excel路径自行修改,程序自动创建,无需手动操作
    excel_path = 'D:/SA/AngularPointCoordinates.xlsx'
    if os.path.exists(excel_path) is False:
        workbook = openpyxl.Workbook()
        worksheet = workbook.active
        worksheet.title = 'data'
        workbook.save(excel_path)
    workbook = openpyxl.load_workbook(excel_path)
    sheet = workbook['data']
    for i in range(0, len(corners1)):
        sheet.cell(i+1, 1, corners11[i][0][0])
        sheet.cell(i+1, 2, corners11[i][0][1])
        sheet.cell(i+1, 3, corners21[i][0][0])
        sheet.cell(i+1, 4, corners21[i][0][1])
    workbook.save(excel_path)

    运行程序,完成后,打开excel文件,其中有54组角点坐标,如下图所示:

    其并没有进行排列,所以我们要自己判断点的位置。其中,最左上角是xy都最小的(opencv像素坐标在左上,以右为x轴、下为y轴的正方向),可以得知第六行是最左上角点坐标,前两列为左相片,后两列为右相片坐标。所以坐标为

    244.4273987, 94.16474152; 127.9022751, 110.3449249

    此时我们找最左上角向下10mm的那个点,位于第五行,x与其大致相同,y稍大,其坐标为:244.9057465, 126.2445526;128.8562469, 142.0508575

    以上面两组数据测试,添加代码

    p1 = uvToXYZ(244.4273987, 94.16474152, 127.9022751, 110.3449249)
    p2 = uvToXYZ(244.9057465, 126.2445526, 128.8562469, 142.0508575)
    dp = p1-p2
    print(dp)

    结果如下

    前两个为p1,p2点空间坐标(我们选的两个点),第三个为坐标差值,单位mm,除了在z方向有1.2mm误差较大外,其他方向误差较小。

    5.精度分析

    经多次测试,单方向最大误差小于2mm,造成这种误差可能是因为没有畸变校正。emm,下次再加上校正后在进行测试。

    ps完整主代码如上,同名点确定属于另一个py文件中。

    参考博客

    https://blog.csdn.net/qq_15947787/article/details/53366592?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162449922616780261926595%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162449922616780261926595&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-6-53366592.pc_search_result_before_js&utm_term=%E5%8F%8C%E7%9B%AE%E7%9B%B8%E6%9C%BA%E8%AE%A1%E7%AE%97%E4%B8%89%E7%BB%B4%E5%9D%90%E6%A0%87&spm=1018.2226.3001.4187

    https://blog.csdn.net/weixin_43535573/article/details/88918400?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162449922616780261926595%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162449922616780261926595&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-13-88918400.pc_search_result_before_js&utm_term=%E5%8F%8C%E7%9B%AE%E7%9B%B8%E6%9C%BA%E8%AE%A1%E7%AE%97%E4%B8%89%E7%BB%B4%E5%9D%90%E6%A0%87&spm=1018.2226.3001.4187

    展开全文
  • 这篇博客我们来学习C++ opencv之OpenCV自带颜色表操作 一、API函数 主要的API函数为 我的理解是applyColorMap(输入图片,输出图片,需要遍历的数组) 这是一个伪色彩函数。 1、函数说明 1、函数说明: (1)void ...

    这篇博客我们来学习C++ opencv之OpenCV自带颜色表操作

    一、API函数

    主要的API函数为
    我的理解是applyColorMap(输入图片,输出图片,需要遍历的数组)
    这是一个伪色彩函数。

    1、函数说明

    1、函数说明:

    (1)void applyColorMap(InputArray src, OutputArray dst, int colormap)

    src: 源图像(灰度图或彩色图(CV_8UC1 or CV_8UC3))。

    dst: 在源图像上进行色彩映射后的结果图像。

    colormap:提供的色彩图代码值。(参见:ColormapTypes 枚举数据类型)

    (2)void applyColorMap(InputArray src, OutputArray dst, InputArray userColor)

    src: 源图像(灰度图或彩色图(CV_8UC1 or CV_8UC3))。

    dst: 在源图像上进行色彩映射后的结果图像。

    userColor:自定义的色彩(CV_8UC1 or CV_8UC3 and size 256)。

    二、代码

    void QuickDemo::color_style_Demo(Mat &image)
    {
    	int colormap[] = {
    	    COLORMAP_AUTUMN,
    		COLORMAP_BONE,
    		COLORMAP_JET,
    		COLORMAP_WINTER,
    		COLORMAP_RAINBOW,
    		COLORMAP_OCEAN,
    		COLORMAP_SUMMER,
    		COLORMAP_SPRING,
    		COLORMAP_COOL,
    		COLORMAP_PINK,
    		COLORMAP_HOT,
    		COLORMAP_PARULA,
    		COLORMAP_MAGMA,
    		COLORMAP_INFERNO,
    		COLORMAP_PLASMA,
    		COLORMAP_VIRIDIS,
    		COLORMAP_CIVIDIS,
    		COLORMAP_TWILIGHT,
    		COLORMAP_TWILIGHT_SHIFTED,
    		COLORMAP_HSV,
    		COLORMAP_TURBO,
    
    
    	};
    	Mat dst;
    	int i = 0;
    	while (true) {
    		int c = waitKey(2000);
    		if (c == 27)
    		{
    			break;
    		}
    		applyColorMap(image, dst, colormap[i%19]);
    		i++;
    		//imshow("颜色风格",dst);
    		//namedWindow("颜色风格", WINDOW_AUTOSIZE);
    		imshow("颜色风格", dst);
    	}
    }
    

    这个代码的实现是:
    我们先定义一个数组,数组中包含了opencv中自带的这些颜色表,然后写一个循环,当按下Esc的时候跳出,定义一个2s的间隔,然后使用这个API函数,遍历这个数组,界面上跳转出21种不同的颜色。

    三、输出结果

    这个跟上一篇博客用到的API函数是一样的,但是实现的结果却有差别,上一篇博客实现的是一张张图。一个个窗口,这个实现的是一个窗口,一个个跳转的图。
    由于需要录屏,所以我把这块的代码修改了一下,不然录屏时间过长。

    //int c = waitKey(2000);
    int c = waitKey(1000);
    

    我附一下我的录屏:

    色彩表

    这篇博客主要讲了C++ opencv之OpenCV自带颜色表操作
    加油吧 阿超没有蛀牙!

    展开全文
  • Python-opencv学习第九课:OpenCv自带颜色表操作 文章目录Python-opencv学习第九课:OpenCv自带颜色表操作一、学习部分二、代码部分1.引入库2.定义色彩函数和自带颜色表操作代码,读入图片并展示,创建window3.伪...

    Python-opencv学习第九课:OpenCv自带颜色表操作


    一、学习部分

    记录笔者学习Python-opencv第九课:OpenCv自带颜色表操作,代码资料来源于网络贾老师视频。

    二、代码部分

    1.引入库

    代码如下:

    import cv2 as cv
    import numpy as np
    

    2.定义色彩函数和自带颜色表操作代码,读入图片并展示,创建window

    代码如下:

    def color_table_demo():
        colormap = [
            cv.COLORMAP_AUTUMN,
            cv.COLORMAP_BONE,
            cv.COLORMAP_JET,
            cv.COLORMAP_WINTER,
            cv.COLORMAP_RAINBOW,
            cv.COLORMAP_OCEAN,
            cv.COLORMAP_SUMMER,
            cv.COLORMAP_SPRING,
            cv.COLORMAP_COOL,
            cv.COLORMAP_PINK,
            cv.COLORMAP_HOT,
            cv.COLORMAP_PARULA,
            cv.COLORMAP_MAGMA,
            cv.COLORMAP_INFERNO,
            cv.COLORMAP_PLASMA,
            cv.COLORMAP_VIRIDIS,
            cv.COLORMAP_CIVIDIS,
            cv.COLORMAP_TWILIGHT,
            cv.COLORMAP_TWILIGHT_SHIFTED
        ]#自带颜色表操作代码19个
    
        image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
        cv.namedWindow("input",cv.WINDOW_AUTOSIZE)#创建一个自动大小的窗口
        cv.imshow("input", image)
    

    3.伪彩色函数

    代码如下:

        index=0
        while True:
            dst=cv.applyColorMap(image,colormap[index]%19)#循环19颜色
            index+=1
            cv.imshow("color style",dst)
            c=cv.waitKey(1000)  # 设置关闭窗口
            if c == 27:#Esc关闭所有窗口
                break
        cv.destroyAllWindows()
    

    4.完整代码

    代码如下:

    import cv2 as cv
    import numpy as np
    
    def read_demo_():
        image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
        cv.imshow("input", image)
        cv.waitKey(0)
        cv.destroyAllWindows()
    
    def color_space_demo_():
        image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
        gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)#将bgr转换为gray
        hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)#将bgr转换为hsv
        thsv=cv.cvtColor(image,cv.COLOR_HSV2BGR)#将HSV转换为BGR
        # cv.namedwindow("input",cv.WINDOW.AUTOSIZE)
        cv.imshow("gray", gray)#显示一个窗口名为gray的gray图像
        cv.imshow("hsv", hsv)#显示一个窗口名为hsv的hsv图像
        cv.imshow("thsv", thsv)  # 显示一个窗口名为thsv的thsv图像
        cv.waitKey(0)#相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭
        cv.destroyAllWindows()
    
    def mat_demo_():
        image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
        h,w,c=image.shape #打印图像的维度 H高度 W宽度 C通道数,色彩图片有三通道,灰色图片零通道
        roi = image[100:200, 100:200, :]  # 感兴趣局部区域像素分布 H高度100-200像素,W宽度100-200像素。灰度图像就没有最后一个冒号
        blank=np.zeros((h,w,c),dtype=np.uint8)#产生一个空白窗口,需要说明H,W,C以及字节数,这是区别于np.zeros_like()函数。
        #blank[60:200, 60:280, :] = image[60:200, 60:280, :]  # blank和image要一致才能匹配
        #blank = np.copy(image)#使用copy函数直接进行复制,将blank上述注释掉
        blank=image#实现原图到blank的复制
        cv.imshow("image", image)#显示原图窗口
        cv.imshow("blank", blank)#显示blank空白窗口
        cv.waitKey(0)#相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭
        cv.destroyAllWindows()
    
    def pixel_demo():
        image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
        cv.imshow("input", image)
        h, w, c = image.shape#打印图像维度
        for row in range(h):#行
            for col in range(w):#列
                b,g,r=image[row,col]#图像写像素
                image[row,col]=(0,g,r)#取反操作,可对其进行更改
        cv.imshow("result", image)#显示取反后的图片
        cv.imwrite("C:/Users/akaak/Pictures/OpenCV/csdn/4/savedexample.png", image)#保存数据图
        cv.waitKey(0)#设置关闭窗口
        cv.destroyAllWindows()
    
    def math_demo():
        image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
        cv.imshow("input", image)
        h, w, c = image.shape#打印图像维度
        blank=np.zeros_like(image)#创建一个和image同尺寸的blank空白窗口
        blank[:,:]=(2,2,2)#让blank空白窗口上面的像素都是50x50
        cv.imshow("blank", blank)#显示一个blank空白窗口,窗口上面的像素都是50x50
        #result=cv.add(image,blank)#进行加减时候,两幅图像大小必须一致,数据类型可以不用一致(增加亮度变亮)
        #result = cv.subtract(image, blank)  # 进行加减时候,两幅图像大小必须一致,数据类型可以不用一致(减少亮度变黑)
        result = cv.divide(image, blank)#改变对比度,对比度降低
        #result = cv.multiply(image, blank)#改变对比度,对比度提高
        cv.imshow("result", result)#显示取反后的图片
        #cv.imwrite("C:/Users/akaak/Pictures/OpenCV/csdn/4/savedexample.png", image)#保存数据图
        cv.waitKey(0)#设置关闭窗口
        cv.destroyAllWindows()
    
    def nothing(x):
        print(x)
    
    def adjust_light_demo():
        image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
        cv.namedWindow("input",cv.WINDOW_AUTOSIZE)#创建一个自动大小的窗口
        cv.createTrackbar("lightness","input",0,100,nothing)#创建一个名为lightness的trackbar,窗口与创建窗口一致。0-100,无回调
        cv.imshow("input", image)
        blank=np.zeros_like(image)#创建一个和image同尺寸的blank空白窗口
        while True:
            pos=cv.getTrackbarPos("lightness","input")#拖动第几个TrackBar,TrackBar在哪个窗口。
            blank[:,:]=(pos,pos,pos)#让blank空白窗口上面的像素都是50x50
            #cv.imshow("blank", blank)#显示一个blank空白窗口,窗口上面的像素都是50x50
            result=cv.add(image,blank)
            cv.imshow("result", result)#显示取反后的图片
            #cv.imwrite("C:/Users/akaak/Pictures/OpenCV/csdn/4/savedexample.png", image)#保存数据图
            c=cv.waitKey(1)#设置关闭窗口
            if c == 27:#Esc
                break
        cv.destroyAllWindows()
    
    def adjust_contrast_demo():
        image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
        cv.namedWindow("input",cv.WINDOW_AUTOSIZE)#创建一个自动大小的窗口
        cv.createTrackbar("lightness","input",0,100,nothing)#创建一个名为lightness的trackbar,窗口与创建窗口一致。0-100,无回调
        cv.createTrackbar("contrast", "input", 100, 200, nothing)  # 创建一个名为contrast的trackbar,窗口与创建窗口一致。100-200,无回调
        cv.imshow("input", image)
        blank=np.zeros_like(image)#创建一个和image同尺寸的blank空白窗口
        while True:
            #pos=cv.getTrackbarPos("lightness","input")#拖动第几个TrackBar,TrackBar在哪个窗口。
            light = cv.getTrackbarPos("lightness", "input")  # 拖动第几个TrackBar,TrackBar在哪个窗口。亮度
            contrast = cv.getTrackbarPos("contrast", "input") /100 # 拖动第几个TrackBar,TrackBar在哪个窗口。对比度
            print("light:",light,"contrast:",contrast)#打印输出实时light和contrast
            #blank[:,:]=(light,light,light)#让blank空白窗口上面的像素都是50x50
            #cv.imshow("blank", blank)#显示一个blank空白窗口,窗口上面的像素都是50x50
            result=cv.addWeighted(image,contrast,blank,0.5,light)#对比度和亮度调整函数
            cv.imshow("result", result)#显示取反后的图片
            #cv.imwrite("C:/Users/akaak/Pictures/OpenCV/csdn/4/savedexample.png", image)#保存数据图
            c=cv.waitKey(1)#设置关闭窗口
            if c == 27:#Esc
                break
        cv.destroyAllWindows()
    
    def keys_demo():
        image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
        cv.namedWindow("input",cv.WINDOW_AUTOSIZE)#创建一个自动大小的窗口
        cv.imshow("input", image)
        while True:
            c=cv.waitKey(1)  # 设置关闭窗口
            gray=image
            if c == 49:# 1控制gray窗口
                gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY)
                cv.imshow("result", gray)#显示灰度图片
            if c == 50:  # 2控制hsv窗口
                hsv=cv.cvtColor(image, cv.COLOR_BGR2HSV)
                cv.imshow("result", hsv)  # 显示灰度图片
            if c == 51:  # 3控制图像几何操作
                invert=cv.bitwise_not(image)
                cv.imshow("result", invert)  # 显示图片几何操作
            if c == 27:#Esc关闭所有窗口
                break
        cv.destroyAllWindows()
    
    def color_table_demo():
        colormap = [
            cv.COLORMAP_AUTUMN,
            cv.COLORMAP_BONE,
            cv.COLORMAP_JET,
            cv.COLORMAP_WINTER,
            cv.COLORMAP_RAINBOW,
            cv.COLORMAP_OCEAN,
            cv.COLORMAP_SUMMER,
            cv.COLORMAP_SPRING,
            cv.COLORMAP_COOL,
            cv.COLORMAP_PINK,
            cv.COLORMAP_HOT,
            cv.COLORMAP_PARULA,
            cv.COLORMAP_MAGMA,
            cv.COLORMAP_INFERNO,
            cv.COLORMAP_PLASMA,
            cv.COLORMAP_VIRIDIS,
            cv.COLORMAP_CIVIDIS,
            cv.COLORMAP_TWILIGHT,
            cv.COLORMAP_TWILIGHT_SHIFTED
        ]#自带颜色表操作代码19个
    
        image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
        cv.namedWindow("input",cv.WINDOW_AUTOSIZE)#创建一个自动大小的窗口
        cv.imshow("input", image)
        index=0
        while True:
            dst=cv.applyColorMap(image,colormap[index]%19)#循环19颜色
            index+=1
            cv.imshow("color style",dst)
            c=cv.waitKey(1000)  # 设置关闭窗口
            if c == 27:#Esc关闭所有窗口
                break
        cv.destroyAllWindows()
    
    if __name__ == "__main__":
        color_table_demo()
    

    三、运行结果

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    部分伪彩色结果图

    总结

    本文介绍了笔者学习Python-opencv第九课:OpenCv自带颜色表操作,学习了cv.applyColorMap函数和定义的19个自带颜色表操作代码,实现了对一幅图片的多种色彩展示(代码资料来源于网络贾老师视频)

    展开全文
  • OpenCV 自带例程总结

    千次阅读 2017-03-11 12:31:30
    OpenCV 自带例程总结原文出处opencv 2.4.4版本共100个自带例子。parter 1: No1. adaptiveskindetector.cpp 利用HSV空间的色调信息的皮肤检测,背景不能有太多与肤色相似的颜色。效果不是特别好。 No2. bagofwords...

    OpenCV 自带例程总结

    原文出处

    opencv 2.4.4版本共100个自带例子。

    parter 1:
    No1. adaptiveskindetector.cpp
    利用HSV空间的色调信息的皮肤检测,背景不能有太多与肤色相似的颜色。效果不是特别好。
    No2. bagofwords_classification.cpp
    好大一串……目前还看不懂。
    No3. bgfg_codebook.cpp
    前后背景分离。开启摄像头或读取视频。
    No4. bgfg_gmg.cpp
    摄像头捕捉,根据运动进行前后背景分离。
    No5. bgfg_segm.cpp
    高斯处理视频。跟踪运动做前背景分割。BackgroundSubtractorMOG2类。
    No6. blobtrack_sample.cpp
    视频跟踪。跟踪视频中的运动物体,用绿色线框出。
    No7. brief_match_test.cpp
    利用brief描述算子匹配二维图像特征点。line118出错.???
    No8. build3dmodel.cpp
    建立三维模型。根据给出的检测器对原始进行建模。
    No9. calibration.cpp 3calibration.cpp
    相机外定标。根据自带的函数提取角点后定标,效果很不好。
    No10. calibration_artificial
    根据角点自动校准摄像。初始化后寻找角点再用calibrateCamera校准,有findChessboardCorners估计效果不

    怎么好。
    No11. chamfer.cpp
    图像匹配。把图像二值后在目标图像中寻找模板图像。主要调用chamerMatching函数。
    No12. contours.c
    轮廓查找与获取。cvFindContours一个函数搞定。
    No13. convert_cascade.c
    从文件中装载训练好的级联分类器或者从OpenCV中嵌入的分类器数据库中导入 然后另存为一个文件。
    No14. convexhull.cpp
    凸包。产生随机点后计算凸包。
    No15. cout_mat.cpp
    opencv中矩阵的输出。
    No16. delaunay.c delaunay2.cpp
    根据随机点进行Delaunay三角测量找到边,结束时计算Voronoi图表的细胞结构。
    No17. demhist.cpp
    直方图均衡化来调节图像的亮度和对比度,输出黑白图像。
    No18. descriptor_extractor_matcher.cpp
    7-8个参数。SIFT匹配。
    No19. detector_descriptor_evaluation.cpp
    计算检测算子。各种Dataset。
    No20. detector_descriptor_matcher_evaluation.cpp
    计算检测算子匹配。也是各种Dataset。
    No21. dft.cpp
    对图像进行离散Fourier变换。数学变换。
    No22. distrans.cpp
    距离变换。计算输入图像所有非零元素和其最近的零元素的距离。
    No23. drawing.cpp
    简单的画点、线、文字等。不解释。
    No24. edge.cpp
    边缘检测。通过滑动条调节阈值,利用Canny检测图像边缘后显示,很简单的一个代码。
    No25. em.cpp
    em聚类。
    No26. fabmap_sample
    fab-mat匹配。从训练数据中建立Chow-Liu树。
    No27. facedetect.cpp smiledetect.cpp
    人脸检测。根据已训练好的分类器对人脸图像进行检测,用不同颜色的圆形框或矩形框标记出检测出的五官。
    No28. facerec_demo.cpp
    人脸识别。
    No29. fback.cpp fback_c.c
    计算视频的光流。默认打开摄像头,有些卡,速度慢。
    No30. filestorage.cpp
    Mat矩阵存储,读写xml/yml文件。
    No31. find_obj.cpp
    有关Surf算法的示例。利用匹配在目标图像中寻找样本图像中的物体。
    No32. find_obj_calonder.cpp
    通过训练分类树检测目标物体。需要训练图像。
    No33. find_obj_ferns.cpp
    同样是目标检测。基于随机蕨丛的快速识别关键点。
    No34. fitellipse.cpp
    椭圆拟合,查找图像轮廓图形。findContours很有用。总体效果不理想。
    No35. freak_demo.cpp
    利用特征点进行图像匹配。特征点描述包括A. Alahi, R. Ortiz, and P. Vandergheynst. FREAK: Fast

    Retina Keypoint.
    No36. gencolors.cpp
    输入颜色数量,产生着色条带状图像。色带宽20。
    No37. generic_descriptor_match.cpp
    SURF图像匹配。输入参数包括两幅图像和参数数据。
    No38. houghlines.cpp houghcircles.cpp
    利用Hough变换提取图像中的直线或圆。效果一般。Canny很重要。
    No39. image.cpp
    基本的图像和视频读取,图像加噪和平滑处理。
    No40. kalman.cpp
    Kalman滤波,先建立运动模型和观察模型。对绕圆周运动的一维点跟踪,算法结果显示了估计点和实际点的连线。
    No41. kmeans.cpp
    聚类分析。在平面上产生随机点后用K-means算法作聚类迭代,由于聚类中心也是随机产生的,可知效果很不好。
    No42. laplace.cpp
    也是边缘检测。由滑动条调整阈值,先对图像作滤波(高斯,均值,中值),后Laplace检测边缘。参数sigma=3时效果最好。
    No43. latentsvmdetect.cpp
    用latentSVM检测目标。
    No44. letter_recog.cpp
    演示训练各种不同的分类器,使用uci的字符库数据集。
    No45. logpolar_bsm.cpp
    坐标的相互转化。
    No46. matcher_simple.cpp
    SURF图像匹配。参数少,效果和generic_descriptor_match.cpp相似。
    No47. matching_to_many_images.cpp
    多幅图像的匹配。强大的SURF算法。
    No48. meanshift_segmentation.cpp
    meanshift图像分割。三个参数spatialRad、colorRad和maxPyrLevel可调。
    No49. minarea.cpp
    产生随机点后计算包含所有点的面积最小的圆和矩形。纯数学问题。
    No50. morphology.c morphology2.cpp
    形态学基本运算,包括开/闭运算,膨胀/腐蚀运算。
    No51. motempl.c
    运动跟踪。
    No52. mser_sample.cpp
    MSER方法区域提取图像轮廓。使用颜色距离阈值的基于MSER方法的最大稳定颜色区域检测子(Maximally

    Stable Colour Regions,MSCR)。
    No53. mushroom.cpp
    演示建立决策分类树训练 使用mushroom数据
    No54. one_way_sample.cpp
    基于主成分分析的特征点匹配问题。运行时间好长……
    No55. opencv_version.cpp
    显示opencv版本。简单的几行代码。
    No56. OpenEXRimages_HighDynamicRange_Retina_toneMapping.cpp

    OpenEXRimages_HighDynamicRange_Retina_toneMapping_video.cpp
    不清楚。
    No57. openni_capture.cpp
    开放式的自然交互视频捕捉。Depth generator。
    No58. pca.cpp
    主成份分析算法。重建。
    No59. peopledetect.cpp
    HOG (Histogram-of-Oriented Gradients)行人或人体检测,使用的是hog特征和svm。
    No60. phase_corr.cpp
    基于相位的相关图像运动方位跟踪程序。
    No61. points_classifier.cpp
    点分类。鼠标点击给定点和类。
    No62. polar_transform.c
    线性坐标和极坐标相互转换。可以从摄像头捕捉图像。
    No63. pyramid_segmentation.c
    金字塔图像分割。
    No64. retinaDemo.cpp
    Retina特征点检测。
    No65. rgbdodometry.cpp
    视觉里程计算法。为了估计刚体变换,试图找到翘曲,即最大化之间连续两个RGBD的帧不同的图像尺度。
    No66. segment_objects.cpp
    视频跟踪分割运动中的物体。
    No67. select3dobj.cpp
    收集数据集对象和分割遮罩,显示了如何使用相机的校准模式。计算该单对应性校准图案上的平面。还显示

    grabCut分割等。
    No68. simpleflow_demo.cpp
    一种光流算法。
    No69. squares.cpp
    寻找矩形。
    No70. starter_imagelist.cpp
    根据图像列表文件yaml读取并显示图像。
    No71. starter_video.cpp
    打开视频图像选择画面保存为图片。
    No72. stereo_calib.cpp
    摄像机立体校准。
    No73. stereo_match.cpp
    立体匹配。
    No74. stitching.cpp stitching_detailed.cpp
    图像拼接。涉及到特征点的提取、特征点匹配、图像融合等等。Stitcher类。
    No75. tvl1_optical_flow.cpp
    光流法视频跟踪。
    No76. tree_engine.cpp
    演示使用不同的决策树 CvDTree dtree;决策树 CvBoost boost;Boosted tree classifier监督学习树

    CvRTrees rtrees;随机树 CvERTrees ertrees;完全随机树。
    No77. video_dmtx.cpp
    视频截图。
    No78. video_homography.cpp
    使用features2d的快速角点检测。
    No79. videostab.cpp
    稳定视频。
    No80. watershed
    做分水岭图像分割。

    parter 2:
    No1. camshiftdemo.cpp
    彩色目标跟踪。根据鼠标点击一个区域的色度光谱来跟踪视频目标。
    No2. connected_components.cpp
    连通区域。findContours+drawContours。
    No3. contours2.cpp
    先画一张线条图后检测轮廓。参数可调。
    No4. ffilldemo.cpp
    漫水填充。根据鼠标选取的点搜索图像中与之颜色相近的点,用不同颜色标注。
    No5. grabcut.cpp
    图像分割,鼠标选取矩形框,抠出前景,分离背景。效果还挺不错的。
    No6. hybridtrackingsample.cpp
    混合跟踪。调试时HybridTracker那出错了,不懂。
    No7. imagelst_creator.cpp
    把图像名称列表写成yaml或xml格式。
    No8. inpaint.cpp
    数字图像修复程序,基于纹理合成。先在图像上随便画,按”i”键后显示修复的图像。
    No9. linemod.cpp
    line196出错.???
    No10. lkdemo.cpp
    点跟踪。改进的Lucas-Kanade光流算法,检测视频运动目标。鼠标点击目标点,视频跟踪。

    parter3:
    No1. detection_based_tracker_sample.cpp
    UNIX或ANDROID平台上使用的例子。基于检测的跟踪。

    展开全文
  • OpenCV自带例程:人脸检测

    千次阅读 2018-07-16 18:22:34
    OpenCV自带的例程中有人脸识别的例程,源文件为 path/opencv-3.4.1/samples/cpp/facedetect.cpp 通过cmake编译之后生成可行性文件,执行时需要指定分类器文件,该文件存放在 opencv-3.4.1/data/haarcascades/...
  • 基于OpenCV自带分类器识别人脸 在VS2019下要安装适用于桌面的VC++ 2015(2017) v14 00(v14)工具集。 访问网站:https://visualstudio.microsoft.com/zh-hans/downloads,下载社区版,并安装 安装完成之后进入这个...
  • 贾志刚老师—opencv基于C++的快速入门课程(第九讲) 知识点:Look Up Table(LUT)查找表 解释了LUT查找表的作用与用法,代码实现与...函数文件:实现不同色彩条下图片的自动切换显示 主程序文件:调用函数 ...
  • 编译opencv自带例子

    千次阅读 2017-04-25 22:27:51
    如程序:/opencv/opencv-3.2.0/samples/cpp/tutorial_code/introduction/display_image/dispaly_image.cpp linux-x86版本: 命令: g++ display_image.cpp -o display_image `pkg-config --cflags --libs opencv` ...
  • OpenCV自带例程介绍

    千次阅读 2018-03-20 15:56:10
    参考:http://www.swarthmore.edu/NatSci/mzucker1/opencv-2.4.10-docs/index.html 自带API介绍: 例程总结: feature2d module
  • 2018.06.02,记录一下自己实现OpenCV自带的人脸检测与识别的功能,温故才能更好地知新嘛。 首先是人脸检测: OpenCV中自带的人脸检测类是一个分类器CascadeClassifier,利用滑动窗口机制+级联分类器的方式,我初步...
  • opencv自带工具训练lbp分类器

    千次阅读 2018-09-28 15:41:22
    利用opencv自带工具训练LBP分类器,自己学习,特地做个记录,分享给大家,哪里写的不好,可以在下面留言! 注:本片博客以人脸检测为实验demo。 一、训练数据准备 1、训练图片制作 1.1 正制作样本注意点: (1...
  • OpenCV版本:OpenCV4.2.0 VS版本:VS2017 操作系统:Windows10 标定过程 1.拍摄标定照片。选择棋盘格进行标定 2.生成照片列表 新建项目添加现有项,打开opencv库在目录opencv\sources\samples\
  • 前景检测算法_4(opencv自带GMM)  前面已经有3篇博文介绍了背景减图方面相关知识(见下面的链接),在第3篇博文中自己也实现了gmm简单算法,但效果不是很好,下面来体验下opencv自带2个gmm算法。  opencv实现背景减...
  • 目录学习 opencv 自带示例 stereo_calib(立体相机标定)准备调试示例代码目标工程确定输入参数类型调试模式(debug)输入参数F5 调试程序执行完毕(输出项目)内外参数据说明学习(TODO)参考 学习 opencv 自带示例...
  • opencv自带hog实现行人检测)

    千次阅读 2016-10-27 16:39:33
    本文主要介绍下opencv中...本文参考的资料为opencv自带的sample。   关于opencv中hog的源码分析,可以参考本人的另一篇博客:opencv源码解析之(6):hog源码分析  开发环境:opencv2.4.2+Qt4.8.2+ubuntu12.0
  • opencv自带的训练器

    千次阅读 2017-03-19 17:00:36
    一、基础知识准备 首先,opencv目前仅支持三种特征的训练检测, HAAR、LBP、...opencv的这个训练算法是基于adaboost而来的,所以需要先对adaboost进行基础知识补充啊,网上一大堆资料,同志们速度去查阅。我的资
  • [学习笔记]ubuntu系统下运行opencv自带双目标定+立体匹配程序双目标定立体匹配 找了很多opencv自带双目标定的资料,发现大多数都是使用vs+opencv或matlab运行的(也可能是找的还不够),参考了一些资料,写了个cmake...
  • 关于opencv自带的PCA降维我有话要说

    千次阅读 2017-11-01 20:14:14
    今天终于把opencv自带的降维函数跑通了,花了我一天时间,, 首先得感谢这篇博客的作者: http://blog.codinglabs.org/articles/pca-tutorial.html 看了他的“PCA的数学原理”,真的有种醍醐灌顶的感觉,把深奥的...
  • 基于OpenCV自带例程的相机标定

    千次阅读 2018-06-09 22:04:44
    OpenCV自带了一个可以用于相机标定的功能,不仅可以标定最常见的棋盘格标定板,还可以用于Halcon常用的圆点阵列标定板。 以下对如何使用该自带例程进行相机标定进行一个简要的介绍,也算是对之前工作的一个总结。...
  • Opencv自带的分类器是adaboost分类器算法思想是通过迭代训练弱分类器得到一个强分类器。每次迭代得到局部最优的分类器,然后将局部最优的分类器权值相加最后得到一个可用的强分类器。 算法伪代码如下: (1) ...
  • 对于opencv的一些图像变换函数暂时先不再这里进行说明,后续有使用到的时候在整理。 要训练自己的xml文件的基本步骤 1、准备正样本、负样本并生成相应的txt文件 2、使用opencv_createsamples.exe 生成vec文件 3...
  • (1)下载opencv自带源码(见附录1 ) (2)调试环境(VS2015+OPENCV310) (3)加载图片(配置中设置路径) 2、代码 3、检测效果 我从网上下载的图片进行测试,效果一般,后面如何改进,再另起一篇吧 ...
  • 如图是opencv自带的训练好的分类器文件haarcascade_frontalface_alt.xml,stage是级联层数,下面tree下面各结点代表的弱分类器的各参数值是什么意思啊?我知道这是弱分类器的组合,弱分类器是单层决策树吧?怎么有两...
  • opencv3.2+contrib 利用自带人脸检测库检测与识别人脸 头文件face-recognize.h: #pragma once #include <opencv2/opencv.hpp> #include <opencv2/face.hpp> #include <...
  • 今天终于把opencv自带的降维函数跑通了,花了我一天时间,, 首先得感谢这篇博客的作者: http://blog.codinglabs.org/articles/pca-tutorial.html 看了他的“PCA的数学原理”,真的有种醍醐灌顶的感觉,把深奥的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,490
精华内容 3,796
关键字:

opencv自带图片