Suche…


Legen Sie für das gesamte Bild eine Volltonfarbe fest

Bei einem nicht leeren cv::Mat img einer bestimmten Größe können wir es auf verschiedene Weise zu einer einfarbigen Farbe füllen:

img = cv::Scalar(blueVal,greenVal,redVal);

oder, allgemeiner, cv::Mat::setTo() , cv::Mat::setTo() :

img.setTo(cv::Scalar(blueVal,greenVal,redVal));

Wenn Sie die ältere OpenCV-C-API mit IplImage* img :

Benutzen:

cvSet(img, CV_RGB(redVal,greenVal,blueVal));

Pixel für Pixel Modifikation von Bildern

In OpenCV können Bilder RGB / BGR, HSV, Graustufenbilder, Schwarzweiß usw. sein. Es ist wichtig, den Datentyp zu kennen, bevor Sie mit Bildern arbeiten.

Die Bilddatentypen sind hauptsächlich CV_8UC3 (Matrix von Uchar mit 3 Kanälen) und CV_8U (Matrix von Uchar mit 1 Kanal), die Konvertierung auf andere Typen wie CV_32FC3, CV_64F ist jedoch ebenfalls möglich. (siehe Datentypen )

imread Sie, dass das Bild ein RGB-Bild ist, das von der imread Funktion gelesen wird.

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;

Ähnlich, wenn das Bild Graustufen ist,

gray.at<uchar>(i,j) = X;

Beachten Sie, dass in OpenCV Schwarzweißbilder als CV_8U-Typ mit den Werten 0 und 255 gespeichert werden. Daher sind das Ändern von BW-Bildern den grauen Bildern gleich.

Änderung der Bildfarbe in OpenCV - kmeans (). Zum Scannen aller Pixel eines Bildes und Ersetzen der Pixelwerte durch generische Farben.

#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 }



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow