Reducción de resolución sin suavizado
Frecuentes
Visto 15,704 veces
3 Respuestas
7
Quizás estas buscando cambiar tamaño ().
# Python code:
import cv2
large_img = cv2.imread('our_large_image.jpg')
small_to_large_image_size_ratio = 0.2
small_img = cv2.resize(large_img, # original image
(0,0), # set fx and fy, not the final size
fx=small_to_large_image_size_ratio,
fy=small_to_large_image_size_ratio,
interpolation=cv2.INTER_NEAREST)
En lugar de interpolation=cv2.INTER_NEAREST
puedes usar cualquiera de estos métodos de interpolación.
Respondido el 20 de junio de 20 a las 10:06
0
cambiar el tamaño () con interpolación = INTER_NEAREST.
EDITAR
hmmm, ¿qué pasa si escribes la función tú mismo?
double factor;
int newcols = round(mat.cols*factor);
int newrows = round(mat.rows*factor);
Mat newmat = Mat(newcol, newrows, mat.type());
for (int i=0;i<mat.cols;i++){
for (int j=0;j<mat.cols;j++){
newmat_<yourtype> (round(i*factor), round(j*factor)) = mat_<yourtype>(i, j);
}
}
No he comprobado si el código funciona o no (lo más probable es que no), pero te haces una idea.
contestado el 09 de mayo de 12 a las 15:05
-3
Puede usar Image Pyramids: pyrDown, los enlaces del documento opencv son http://docs.opencv.org/2.4/doc/tutorials/imgproc/pyramids/pyramids.html
contestado el 21 de mayo de 16 a las 05:05
Si bien esto puede responder teóricamente a la pregunta, sería preferible para incluir las partes esenciales de la respuesta aquí y proporcionar el enlace como referencia. - Raju
La pregunta solicita específicamente sin suavizar y menciona pyrDown como contraejemplo. A menos que incluya una explicación de cómo se puede usar pyrDown para reducir la muestra sin suavizar, esto no responde la pregunta. - Cecilia
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas opencv or haz tu propia pregunta.
Más específicamente, me gustaría desechar todas las filas y columnas pares. Desafortunadamente, su sugerencia arroja muchos BUUU:
template<class T> Mat_<T> DownsampleFromGrid8ToGrid16(Mat_<T>& x) { Mat_<T> res(Size(x.cols/2, x.rows/2)); for(int i = 0; i < x.rows; i++) for(int j = 0; j < x.cols; j++) if(i%2 == 1 && j%2 == 1) res(i/2,j/2) = x(i,j); Mat_<T> tmp; resize(x, tmp, Size(res.cols, res.rows), 0, 0, INTER_NEAREST); for(int i = 0; i < res.rows; i++) for(int j = 0; j < res.cols; j++) { T tt=res(i,j); T ttt=tmp(i,j); if(tt != ttt) puts("BUUU"); } return res; }
- Vadim Kantorov