Я собираю кадр данных из тепловизора с разрешением 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;
}