2015-11-13 2 views
2

Я собираю кадр данных из тепловизора с разрешением 102 x 77. Я хочу уменьшить этот размер до 80 x 60. Качество не является основной проблемой, но простота реализации и скорость.C++ Как наилучшим образом масштабировать изображение, отбрасывая пиксели

Я считаю, что могу сделать это примерно на опуская каждый 4-й пиксель:

>>> 80.0/102.0 
0.7843137254901961 
>>> 
>>> 60.0/77.0 
0.7792207792207793 
>>> 
>>> 102 * (0.75) 
76.5 
>>> 77 * (0.75) 
57.75 

Поскольку это точно не 4, как объяснить я для этого? Каков наилучший способ сбросить количество пикселей, необходимых для получения 80 x 60? Благодарю.

кода, где я итерация пикселей:

// Initialize data store for frame pixel data 
vector<quint8> data; 
data.resize(frame.getHeight() * frame.getWidth()); 

// Try to get a frame 
forever 
{ 

    // Request a frame and check return status 
    if (!getRawFrame(frame)) { 

     qDebug() << "************************"; 
     qDebug() << "Failed Capture Attempt!"; 
     qDebug() << "************************"; 

     // Failed - try again 
     continue; 

    } 

    // Get the height and width 
    int h = frame.getHeight(); 
    int w = frame.getWidth(); 

    // Get the frame raw data 
    vector<quint8> rawdata = frame.getRawData(); 

    // Iterate the pixels 
    for (int y = 0; y < h; y++) 
    { 
     for (int x = 0; x < w; x++) 
     { 

      // Extract 
      quint8 pixelValue = reinterpret_cast<quint8*>(rawdata.data())[y*w+x]; 
      int convertToInt = int(pixelValue); 

      /// do stuff on pixel data 

      // Downconvert 
      pixelValue = convertToInt; 

      // Assign 
      data[y*w+x] = pixelValue; 

     } 
    } 

    // Assign the data to the Frame now 
    frame.setData(data); 

    // Done with capture loop 
    break; 

} 

ответ

3

Имея меньшее разрешение, чем то, что вам нужно после падения пикселей, очевидно, не то, что вы хотите. И так как вы не можете просто волшебным образом получить некоторые из пикселей назад, я бы постарался не отбросить их в первую очередь.

Мой подход в этом случае будет падать каждый пятый пиксель. Это оставит вас с разрешением 81x61. Теперь вы можете просто удалить еще одну строку и еще одну колоду пикселей, и все готово. Это самый быстрый и легкий, о котором я могу думать.

Смежные вопросы