opencv
Modifica del contenuto dell'immagine
Ricerca…
Imposta l'intera immagine su un colore solido
Dato un cv::Mat img
non vuoto di alcune dimensioni, possiamo riempirlo con un colore solido in diversi modi:
img = cv::Scalar(blueVal,greenVal,redVal);
o, più generale, maschera di supporto, cv::Mat::setTo()
:
img.setTo(cv::Scalar(blueVal,greenVal,redVal));
Se stai usando la vecchia API OpenCV C con IplImage* img
:
Uso:
cvSet(img, CV_RGB(redVal,greenVal,blueVal));
Pixel per modifica pixel delle immagini
In OpenCV, le immagini possono essere RGB / BGR, HSV, grayscaled, nero-bianco e così via. È fondamentale conoscere il tipo di dati prima di trattare con le immagini.
I tipi di dati dell'immagine sono principalmente CV_8UC3
(Matrice di uchar con 3 canali) e CV_8U (Matrice di uchar con 1 canale), tuttavia è possibile anche la conversione in altri tipi come CV_32FC3, CV_64F. (vedi tipi di dati )
Si consideri, l'immagine è un'immagine RGB che viene letta dalla funzione imread
.
Mat rgb = imread('path/to/rgb/image', CV_LOAD_IMAGE_COLOR);
//to set RED pixel value of (i,j)th to X,
rgb.at<Vec3b>(i,j)[0] = X;
Allo stesso modo, se l'immagine è grigi,
gray.at<uchar>(i,j) = X;
Si noti che, in OpenCV, le immagini in bianco e nero sono memorizzate come tipo CV_8U con i valori 0 e 255. Pertanto, la modifica delle immagini BW è la stessa delle immagini grigie.
Modifica del colore dell'immagine in OpenCV - kmeans (). Per scansionare tutti i pixel di un'immagine e sostituire i valori dei pixel con colori generici.
#include opencv2/opencv.hpp> #include vector> using namespace std; using namespace cv; int main() { Mat3b img = imread("test.jpg"); z
}
imshow("Original", img); // Cluster int K = 8; int n = img.rows * img.cols; Mat data = img.reshape(1, n); data.convertTo(data, CV_32F); Mat 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.at<int>(i), 0); data.at<float>(i, 1) = colors(labels.at<int>(i), 1); data.at<float>(i, 2) = colors(labels.at<int>(i), 2); } Mat reduced = data.reshape(3, img.rows); reduced.convertTo(reduced, CV_8U); imshow("Reduced", reduced); waitKey(0); return 0;
#include opencv2/opencv.hpp> #include vector> using namespace std; using namespace cv; int main() { Mat3b img = imread("test.jpg");
z
}