计算摄影学实验一实验报告

2017-02-27  本文已影响0人  小浪明

实验环境

Windows操作系统、Visual Studio 2015、OpenCV 3.2.0

安装OpenCV

从官方网站下载OpenCV的最新版本,这次版本是3.2.0。

注:从Chrome下载会碰到下载的安装包不完整的情况,同时Chrome不支持断点续传,所以推荐用迅雷进行下载,下载方法:在Chrome下载目录中找到OpenCV的下载链接,打开迅雷新建任务即可。

Hello,OpenCV

使用OpenCV 3.2.0的配置过程

  1. 右键项目->属性,将配置改成所有配置,将平台改为所有平台;

  2. 在左侧目录栏中选择VC++目录,在右侧的包含目录下拉项中点选编辑,在弹出的窗口中添加三个工作路径:
    opencv/build/include opencv/build/include/opencv opencv/build/include/opencv2

  3. 在库目录中,添加两个工作路径
    opencv/build/x64/vc14 opencv/build/x64/vc14/lib

  4. 接下来,在左侧找到链接器->输入,在右侧的附件依赖项中添加需要链接到的OpenCV库(lib.)文件
    注:在VS2015以及OpenCV3.2.0的条件下,只需要添加一个库文件opencv_world320d.lib即可

  5. 之后即可以编译运行程序,不过需要将程序需要的动态链接库(.dll)放在和可执行程序(.exe)同一目录下,否则不能运行。

操作OpenCV数据

使用image.at<...>()访问图像中的像素

image.at<Vec3b>(i, j)
图像的通道数为4(png图像,RGBA,A为透明度)

遍历image的像素,将图片的白色部分修改为黑色

    Vec3b black = { 0, 0, 0 };
    Vec3b white = { 0xff, 0xff, 0xff };
    for (int i = 0; i < image.rows; i++) {
          for (int j = 0; j < image.cols; j++) {
                if (image.at<Vec3b>(i, j) == white)
                    image.at<Vec3b>(i, j) = black;
                }
        }    
    }

图像的长和矩阵的行数是一样的,图像的宽乘以通道数就是矩阵的列数。

修改程序,将image反色

    Mat reverse(image.size(), image.type(), Scalar(255, 255, 255));
    image = reverse - image;

方法就是新建一个和image大小一样但是全白色的新矩阵,然后用新矩阵去减image得到反色的image

构造矩阵,并计算其逆矩阵

    Mat Mat32(32, 32, CV_32FC1);
    for (int i = 0; i < 32; i++) {
        for (int j = 0; j < 32; j++) {
            if (i == j)Mat32.at<float>(i, j) = 2;
            else if (i - 1 == j || i + 1 == j)Mat32.at<float>(i, j) = -1;
            else Mat32.at<float>(i, j) = 0;
        }
    }
    Mat32 = Mat32.inv();
    Mat result;
    normalize(Mat32, result, 1.0, 0.0, CV_MINMAX);

normalize函数就是用来重新映射得到灰度图的方法。将最小值设为黑,最大值设为白。

上一篇 下一篇

猜你喜欢

热点阅读