C ++ Как лучше масштабировать изображение, отбрасывая пиксели

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

Я полагаю, что могу сделать это, грубо отбрасывая каждый 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 х 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;

}

2

Решение

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

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

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]