当前位置: 代码迷 >> QT开发 >> 用Qt编撰图缩放算法
  详细解决方案

用Qt编撰图缩放算法

热度:20   发布时间:2016-04-25 04:12:00.0
用Qt编写图缩放算法
我想接触一下图像算法,但不知道该怎么入手,想自己练习一些简单的图像算法,之前MFC基本没接触过,Qt的用时间相对还算长一点,但还是不知道该怎么入手去编写处理图像的算法程序,在网上看到一个算法例子:http://blog.csdn.net/v_JULY_v/article/details/6227072  但不知道该怎么去在Qt实现,希能到大家的指点
------解决方案--------------------
楼主是想要基础函数吧,例如描点、画线的函数?
Qt是C++的一个库,语法和C++是一样的。
------解决方案--------------------
可能是getPixel之类的函数吧,参考QImage
我接触Qt时间也不长,以上仅供参考
------解决方案--------------------
QImage已经为您实现了缩放的算法了,直接呼叫scale就好

如果你想开发影象处理的演算法
我会建议您用openCV2这种专门为了影象处理而开发的库
openCV2针对各类图象处理的演算法做了不少的优化
gpgpu,sse指令的优化都不在话下

以下是我利用openCV实现的bilinear缩放算法,抛砖引玉
希望能看见更快的实做方法

template<typename T>
cv::Mat_<T> const bilinear_interpolation(cv::Mat_<T> const &src, cv::Size dsize,
                                         float dx, float dy)
{
    cv::Mat_<T> dst = dsize.area() == 0 ? cv::Mat_<T>(src.rows * dy, src.cols * dx) :
                                          cv::Mat_<T>(dsize);

    float const x_ratio = static_cast<float>((src.cols - 1)) / dst.cols;
    float const y_ratio = static_cast<float>((src.rows - 1)) / dst.rows;
    for(int row = 0; row != dst.rows; ++row)
    {
        int y = static_cast<int>(row * y_ratio);
        float const y_diff = (row * y_ratio) - y; //distance of the nearest pixel(y axis)
        float const y_diff_2 = 1 - y_diff;
        auto *dst_ptr = &dst(row, 0)[0];
        for(int col = 0; col != dst.cols; ++col)
        {
            int x = static_cast<int>(col * x_ratio);
            float const x_diff = (col * x_ratio) - x; //distance of the nearet pixel(x axis)
            float const x_diff_2 = 1 - x_diff;
            float const y2_cross_x2 = y_diff_2 * x_diff_2;
            float const y2_cross_x = y_diff_2 * x_diff;
            float const y_cross_x2 = y_diff * x_diff_2;
            float const y_cross_x = y_diff * x_diff;
  相关解决方案