opencv
Wijziging van beeldinhoud
Zoeken…
Stel het hele beeld in op een effen kleur
Gegeven een niet-lege cv::Mat img
van enige grootte, kunnen we het op verschillende manieren tot een effen kleur vullen:
img = cv::Scalar(blueVal,greenVal,redVal);
of, meer algemeen, maskerondersteunend, cv::Mat::setTo()
:
img.setTo(cv::Scalar(blueVal,greenVal,redVal));
Als u de oudere OpenCV C API met IplImage* img
:
Gebruik:
cvSet(img, CV_RGB(redVal,greenVal,blueVal));
Pixel voor pixel modificatie van afbeeldingen
In OpenCV kunnen afbeeldingen RGB / BGR, HSV, grijswaarden, zwart-wit, enzovoort zijn. Het is cruciaal om het gegevenstype te kennen voordat u met afbeeldingen omgaat.
De beeldgegevenstypen zijn voornamelijk CV_8UC3
(Matrix van uchar met 3 kanalen) en CV_8U (Matrix van uchar met 1 kanaal), maar de conversie naar andere typen zoals CV_32FC3, CV_64F is ook mogelijk. (zie gegevenstypen )
Overweeg dat de afbeelding een RGB-afbeelding is die wordt gelezen door de imread
functie.
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;
Evenzo, als de afbeelding grijswaarden heeft,
gray.at<uchar>(i,j) = X;
Merk op dat in OpenCV zwart-witafbeeldingen worden opgeslagen als CV_8U-type met de waarden 0 en 255. Daarom zijn veranderende BW-afbeeldingen hetzelfde als grijze afbeeldingen.
Beeldkleurwijziging in OpenCV - kmeans (). Alle pixels van een afbeelding scannen en de pixelwaarden vervangen door generieke kleuren.
#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
}