中北大学安卓实验室视觉培训第一期作业



一、摄像机与视频的读取

    VideoCapture cap(0);//读取摄像头,建立一个名为cap的videocapture的结构

    while (true)//循环为ture执行 
    {
        Mat frame;//建立一个名为frame的Mat类
        cap>>frame;//把cap输入到frame里

        namedWindow("123",0);//建立一个名为123的窗口,自适应大小
        imshow("123",frame);//在名为123的窗口上显示frame
        waitKey(30);//等待30ms
    }

二、读取图片与其中的像素值

    Mat imggray=imread("123.jpg",1);//建立一个名为imggray的Mat类,读取123.jpg图片,载入三通道颜色
    cvtColor(imggray,imggray,CV_RGB2GRAY);//用cvtColor函数将imggray转化为灰度图

    cout<<(int)imggray.at(1,1)<

三、Mat对象一些操作 

 Mat imgone=Mat::ones(5,5,CV_64FC1);//定义一个5行5列的全部为1矩阵,cv_64fc1对应double类型
    Mat sum=image*imgone;//定义个Mat类sum,值为image与imgone的乘积
    cout<<sum<<endl;//输出sum
    Mat image=Mat::eye(5,5,CV_64FC1);//定义一个5行5列的对角矩阵
    image.inv();//image的逆矩阵

四、图像x方向求导的卷积与非卷积操作

VideoCapture cap(0);//读取摄像头
    while (true)
    {
        Mat frame;
        cap>>frame;

        cvtColor(frame,frame,CV_RGB2GRAY);
	/*cout<<"row"<(i,j-1)=frame.at(i,j-1)-frame.at(i,j+1);
            }
        }*/
        //下面是求图像的卷积
        Mat dimg=Mat(frame.rows,frame.cols-2,CV_8UC1);
        Mat model=Mat(1,3,CV_64FC1);//model为一个一行三列的64位浮点型单通道矩阵
        model.at(0,0)=1;//对model这个矩阵赋值
        model.at(0,1)=0;
        model.at(0,2)=-1;
        for(int i=0;i(i+m,j+n))*model.at(m,n+half);//强制转换为double类型
                    }
                }
                dimg.at(i,j-1)=(uchar)sum;//将对应的值赋给dimg
            }

        }



        imshow("123",dimg);//在123窗口上显示dimg
        waitKey(10);//延迟等待10ms
    }

五、高斯模糊的核创建与卷积操作

   double sigma=50;//定义sigima的值
    Mat gauss(5,5,CV_64FC1);//创建一个矩阵
    for (int i=-2;i<3;i++)
    {
        for (int j=-2;j<3;j++)
        {
            gauss.at(i+2,j+2)=exp(-(i*i+j*j)/(2*sigma*sigma));
        }
    }

    double gssum=sum(gauss).val[0];
    for (int i=-2;i<3;i++)
    {
        for (int j=-2;j<3;j++)
        {
            gauss.at(i+2,j+2)/=gssum;
        }
    }

    //cout<>frame;
        cvtColor(frame,frame,CV_RGB2GRAY);//将图像转换为灰度图
        Mat dimg=Mat(frame.rows-4,frame.cols-4,CV_8UC1);
        for (int i=2;i(i+m-2,j+n-2))*gauss.at(m,n);//强制转换成double型uchar对应上面的CV_8UC1
                    }
                }
                dimg.at(i-2,j-2)=(uchar)sum;

            }
        }


        imshow("a",frame);//在窗口a上显示frame
        imshow("gauss",dimg);//在窗口gauss上显示dimg
        waitKey(10);//等待10ms
六、相关API操作
    VideoCapture cap(0);//调用摄像头
    while (true)
    {
        Mat frame;
        cap>>frame;
        cvtColor(frame,frame,CV_RGB2GRAY);//转换成灰度图

        //GaussianBlur(frame,frame,cvSize(5,5),10,10);直接调用高斯模糊函数(输入图像,目标图像,高斯内核的大小[由sigima计算而来],高斯核函数在x方向上的的标准偏差,在y方向上的标准偏差)
        //Canny(frame,frame,100,100);调用Canny函数,算法做边缘检测(输入图像,目标图像,第一个阈值,第二个阈值)阈值用于控制边缘连接
        //Sobel(frame,frame,0,1,1);调用Sobel函数

        imshow("q",frame);//在窗口q上显示frame
        waitKey(10);//等待10ms

    }




你可能感兴趣的:(学习笔记)