0
点赞
收藏
分享

微信扫一扫

opencv c++学习十(通道分离合并 像素值统计 随机绘制)

weednoah 2022-02-05 阅读 60

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

 

举报

相关推荐

0 条评论