1.通道分离与合并
涉及函数:
spilt()
merge()
参考:opencv中的split函数_alickr的博客-CSDN博客_opencv split
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main() {
string path = "resouces\\flower.jpg";
Mat src = imread(path);
vector<Mat> channels;
resize(src, src, Size(), 0.3, 0.3);
imshow("原始图像", src);
//分离各个通道 单通道图像为灰度图
//注意 分离出来的通道为bgr
split(src, channels);
imshow("blue channel", channels[0]);
imshow("Green channel", channels[1]);
imshow("Red channel", channels[2]);
channels[0] = 0;
//合并各个通道的图
merge(channels,src);
imshow("合并图像", src);
waitKey(0);
return 0;
}
2.像素值统计
涉及函数:
minMaxLoc()
meanStdDev()
minMaxLoc函数:
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main() {
double min, max;
Point min_spc, max_spc;
string path = "resouces\\flower.jpg";
Mat src = imread(path);
vector<Mat> channels;
resize(src, src, Size(), 0.3, 0.3);
imshow("原始图像", src);
split(src, channels);
//注意:传进去的是单通道的数据
for (int i = 0; i < channels.size(); i++) {
minMaxLoc(channels[i], &min, &max, &min_spc, &max_spc,Mat());
cout << "min的值:" << min << endl << "max的值" << max << endl;
cout << "min的位置:" << min_spc << endl << "max的位置" << max_spc << endl;
}
Mat mean, stddev;
//这里的数据是三通道的
meanStdDev(src, mean, stddev);
cout << "mean的值:" << mean << endl << "std的值" << stddev << endl;
waitKey(0);
return 0;
}
3.随机绘制
涉及函数:
rng函数
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main() {
Mat src = Mat(400, 400, CV_8UC3, Scalar(0, 0, 0));
RNG rng(12345);
int w = src.cols;
int h = src.rows;
int x1, y1, z1, x2, y2, z2;
int r, g, b;
while (true) {
int c = waitKey(10);
if (c == 27) {
break;
}
x1 = rng.uniform(0, w);
y1 = rng.uniform(0, h);
x2 = rng.uniform(0, w);
y2 = rng.uniform(0, h);
r = rng.uniform(0, 255);
g = rng.uniform(0, 255);
b = rng.uniform(0, 255);
src=Scalar(0,0,0);
//在这里加上这个 看起来就像一次只画了一条线一样
line(src, Point(x1, y1), Point(x2, y2), Scalar(r, g, b), LINE_4, 0);
imshow("随机绘制", src);
}
return 0;
}