Как изменить размер изображения на изображение с высоким разрешением без потери пикселей?

Я работаю над некоторыми задачами обработки изображений.

Я сделал растровое изображение с низким разрешением, используя getDrawingCache() и createScalledBitmap()

Но когда я изменяю размер изображения до высокого разрешения, скажем, 612 X 612, мое изображение становится размытым. И это выглядит так плохо.

Есть ли способ изменить размер изображений на высокое разрешение без потери пикселей? Есть ли у openCV такие классы?

Вы не можете. Если ваше изображение 200×200, то сколько пикселей содержит информация. Если вы масштабируете его, это все равно будет то же количество информации, только вы должны распространять его на более широкую область.

Подумайте об этом так: скажем, у вас есть изображение, которое является одним пикселем, и этот пиксель синий. Теперь вы хотите масштабировать это изображение до двух пикселей. Какой цвет должен иметь второй пиксель? Ответ: это может быть что угодно. В первом пикселе нет информации, которая могла бы авторитетно решить, как должен выглядеть второй пиксель, нет никакой информации.

Таким образом, дело не в том, чтобы «потерять пиксели», как вы выразились, это вопрос добавления новых пикселей без информации о том, как они должны выглядеть. Таким образом, изменение размера использует имеющуюся у него информацию, которая в основном говорит: «Сделайте вставленные / новые пиксели такими же, как и ближайший соседний ранее существующий пиксель».

Существуют алгоритмы и методы интерполяции (угадывания), на что должны были бы вставляться вставленные пиксели, чтобы избежать зубчатых краев и т. Д. В Википедии есть хорошая информация о различных методах масштабирования на основе интерполяции и суперсэмплинге в качестве отправной точки. Обратите внимание, хотя ни один из этих методов не создает новую информацию, они только сглаживают края и делают масштабированное изображение менее зазубренным.

Что вам нужно сделать, так это создать оригинальное изображение размером 612 X 612, а затем уменьшить размер и сохранить его как нечто другое, чтобы у вас было оригинальное большое изображение и небольшое изображение. Его легко перейти от большого к небольшому размеру изображения, чем от маленького до большого.

Я решил это использовать Активы ..

(1) Поместите все мои изображения в папку с ресурсами

(2) Чтение изображений с использованием входного потока

Теперь мне не нужно изменять размер, и он отлично работает, как я хочу. как это:

 private void setThemeBackgroundImage(String imageName, Button themeButton) { try { InputStream backgroundBitmap = getAssets().open(imageName); Bitmap immutableBitmap = BitmapFactory .decodeStream(backgroundBitmap); themeButton.setBackgroundDrawable(new BitmapDrawable( getResources(), immutableBitmap)); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }