通过OpenCV对图像进行下采样2

时间:2018-09-25 17:13:18

标签: c++ opencv image-processing

伙计们。众所周知,我是这种环境的新手,所以如果我做错了什么,请随时警告我。

因此,我试图创建一种基本算法,以一种古老的技术对图像进行下采样。我也是OpenCV的新手。

#include "opencv2/core/utility.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include <stdio.h>
#include <iostream>


using namespace std;
using namespace cv;

void filter2(const Mat &image, Mat &out)
{
    // convert and split
    Mat imgf;
    image.convertTo(imgf, CV_32F, 1.0 / 255.0);
    Mat chn[3];
    split(imgf, chn);
    Mat newchn[3];  
    // Resampling by 2
    for (int dim = 0; dim < 3; dim++) {
        Mat dummy2;
        Mat dummy = chn[dim];
        for (int i = 0; i < chn[dim].rows/2; i++) {
            for (int j = 0; j < chn[dim].cols/2; j++) {             
                dummy2.at<double>(i,j) = dummy.at<double>(i*2,j*2);         
            }
        }
        dummy2 = newchn[dim];
    }
    // merge and convert
    merge(newchn, 3, imgf);
    imgf.convertTo(out, CV_8U, 255.0);
}

int main(int agra, char** argv) {
    String fn = "eva_green.png";
    if (agra > 1) fn = argv[1];
    Mat image = imread(fn);
    if (image.empty())
    {
        cerr << "No image";
        return 1;
    }
    Mat result;
    filter2(image, result);
    imshow("org", image);
    imshow("res", result);
    waitKey(0);
    return 0;

}

“ filter2”功能完成该工作。我的代码有什么问题?

0 个答案:

没有答案