visa tarjeta solicitar rumiñahui pago net matricula home general estado cuentas cuenta con banco ahorros c++ opencv colors pixels bgr

tarjeta - ¿Existe una fórmula para determinar el color general dados los valores de BGR?(OpenCV y C++)



pago matricula visa bgr (3)

Sí, lo que probablemente quiere decir con "Color general de un píxel" es el "Tono" o la "Saturación" del color.

Entonces, desea una fórmula que transforme RGB a HSV (tono, saturación, valor), y luego solo le interesarán los valores de tono o saturación.

Ver: Algoritmo para convertir RGB a HSV y HSV a RGB en el rango 0-255 para ambos

EDITAR: es posible que deba maximizar la saturación y luego convertirla nuevamente a RGB e inspeccionar qué valor es el más alto (por ejemplo (255,0,0) o (255,0,255), etc.

Estoy haciendo una función usando C ++ y OpenCV que detectará el color de un píxel en una imagen, determinará en qué rango de color está y lo reemplazará con un color genérico. Por ejemplo, el verde podría variar de verde oscuro a verde claro, el programa determinaría que todavía es verde y lo reemplazaría con un verde simple, haciendo que la imagen de salida tenga un aspecto muy simple. todo está configurado, pero tengo problemas para definir las características de cada rango y tenía curiosidad si alguien sabe o una fórmula que, dados los valores de BGR, podría determinar el color general de un píxel. Si no, tendré que experimentar mucho y hacerlo yo mismo, pero si ya existe algo, ahorraría tiempo. He investigado mucho y hasta ahora no he encontrado nada.


Si desea acceder al valor RGB de todos los píxeles, a continuación se muestra el código,

#include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { Mat image = imread("image_path"); for(int row = 1; row < image.rows; row++) { for(int col = 1; col < image.cols; col++) { Vec3b rgb = image.at<Vec3b>(row, col); } } }


Si desea simplificar su imagen (es decir, con menos colores), pero bien parecido, tiene algunas opciones:

  • Un enfoque simple sería dividir ( división de enteros ) por un factor N la imagen, y luego multiplicar por un factor N

  • O puede dividir su imagen en K colores, utilizando un algoritmo de agrupación como kmeans muestra aquí, o un algoritmo de corte medio.

Imagen original:

Colores reducidos (cuantizados, N = 64 ):

Colores reducidos (agrupados, K = 8 ):

Cuantificación de código:

#include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { Mat3b img = imread("path_to_image"); imshow("Original", img); uchar N = 64; img /= N; img *= N; imshow("Reduced", img); waitKey(); return 0; }

Código k significa:

#include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { Mat3b img = imread("path_to_image"); imshow("Original", img); // Cluster int K = 8; int n = img.rows * img.cols; Mat data = img.reshape(1, n); data.convertTo(data, CV_32F); vector<int> labels; Mat1f colors; kmeans(data, K, labels, cv::TermCriteria(), 1, cv::KMEANS_PP_CENTERS, colors); for (int i = 0; i < n; ++i) { data.at<float>(i, 0) = colors(labels[i], 0); data.at<float>(i, 1) = colors(labels[i], 1); data.at<float>(i, 2) = colors(labels[i], 2); } Mat reduced = data.reshape(3, img.rows); reduced.convertTo(reduced, CV_8U); imshow("Reduced", reduced); waitKey(); return 0; }