Para agregar valor constante al valor de saturación de cada píxel, lo hago en bucles dobles. Me pregunto si hay algún comando más simple y más rápido para lograr esto.¿Cómo cambiar los valores de saturación con opencv?
Respuesta
Mat img(200, 300, CV_8UC1);
Mat saturated;
double saturation = 10;
double scale = 1;
// what it does here is dst = (uchar) ((double)src*scale+saturation);
img.convertTo(saturated, CV_8UC1, scale, saturation);
EDITAR
Si por la saturación, es decir el canal S una imagen de HSV en, tiene que separe su imagen en tres canales con split()
, aplicar la corrección de la saturación para el canal S, y luego júntelos con merge()
.
// BGR to HSV
cvCvtColor(img, img, CV_BGR2HSV);
for (int i=0; i < img.rows ; i++)
{
for(int j=0; j < img.cols; j++)
{
// You need to check this, but I think index 1 is for saturation, but it might be 0 or 2
int idx = 1;
img.at<cv::Vec3b>(i,j)[idx] = new_value;
// or:
// img.at<cv::Vec3b>(i,j)[idx] += adds_constant_value;
}
}
// HSV back to BGR
cvCvtColor(img, img, CV_HSV2BGR);
@Karlphillip - Creo que se hizo la pregunta para conocer una respuesta alternativa que usted dio. –
Para los experimentos que intentaron, el método alternativo de valores de división de HSV, el ajuste de los canales individuales y luego hacer una fusión dio un mejor rendimiento. A continuación se muestra lo que funcionó para mí muchas veces más rápido en comparación con bucle a través de píxeles:
(h, s, v) = cv2.split(imghsv)
s = s*satadj
s = np.clip(s,0,255)
imghsv = cv2.merge([h,s,v])
Tenga en cuenta que me había convertido los valores a float32 durante la transformación BGR2HSV para evitar valores negativos durante la transformación de saturación al debido uint8 (por defecto) de desbordamiento:
imghsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV).astype("float32")
y convertida de nuevo a los valores predeterminados después de mi uint8 ajuste de saturación:
imgrgb = cv2.cvtColor(imghsv.astype("uint8"), cv2.COLOR_HSV2BGR)
- 1. ¿Cómo puedo cambiar la saturación de un UIImage?
- 2. ¿Cómo calcula OPENCV los valores propios y los vectores propios?
- 3. ¿Cómo cambiar los valores de Hash?
- 4. Cómo usar ¿Cambiar con valores de diccionario?
- 5. Los valores de la matriz de Opencv muestran
- 6. SingleOrDefault: ¿Cómo cambiar los valores predeterminados?
- 7. cambiar los valores predeterminados de un Plugin
- 8. Cambiar el tamaño de la imagen con GDI en .NET da baja saturación
- 9. XSLT: cambiar ciertos valores de los atributos
- 10. OpenCV - ¿Cómo maneja los perfiles de color?
- 11. ¿Cambiar los valores dentro de NSArray desreferenciando?
- 12. imprimir los valores de una matriz (MAT) en OpenCV C++
- 13. OpenCV: Obteniendo el total de los valores Mat
- 14. Cambiar valores de CSS con Javascript
- 15. pandas: cómo cambiar todos los valores de una columna?
- 16. ¿Cómo puedo iterar sobre una colección y cambiar los valores con los métodos de extensión LINQ?
- 17. ¿Cambiar los valores en Flags Enum?
- 18. ¿Cómo cambiar los valores que anulan el método 'to_json'?
- 19. django: cómo cambiar los valores para nullbooleanfield en un modelo?
- 20. cómo cambiar nodo XML valores
- 21. ¿Cómo se editan/leen los valores de píxel en OpenCv desde la variable Mat?
- 22. JQuery cambiar el tono, la saturación, la gama de <img>?
- 23. ¿Cómo construyo OpenCV con TBB?
- 24. ¿Cómo se pueden establecer los valores tipados de valores C# en NHibernate con los parámetros IQuery?
- 25. Ciclo a través de píxeles con opencv
- 26. ¿Tratar con píxeles en contornos (OpenCV)?
- 27. Accediendo a valores de píxel OpenCV 2.3 - C++
- 28. Utilice foreach() para recorrer el objeto y cambiar los valores
- 29. Detección de iris con opencv
- 30. Imprimir los valores de la matriz de descriptores de puntos clave opencv
La función anterior funcionará para cualquier tipo de matriz, simplemente Do bitute CV_8UC1 para su tipo. La documentación para la función convertTo se puede encontrar [aquí] (http://opencv.itseez.com/modules/core/doc/basic_structures.html#mat-convertto) – Chris
Sí, si desea tratar solo el canal S Tendría que separar eso primero. En cuanto a lo que es más rápido, no sé, ¡prueba los dos y mira! – Chris
ConvertTo definitivamente está optimizado, pero la penalidad de dividir y fusionar (con todas las asignaciones involucradas) puede ser mayor que la ganancia de usar la conversión optimizada(). Como dijo Chris, intenta ver. – Sam