opencv 入门

学习链接


第一节课:显示一张图片

第一节课主要在于环境的配置和编译器的配置 VS2017 + opencv4
主要用到了函数 imread()、imshow()

	//第一节课  加载一张图片
	
	//IMREAD_GRAYSCALE 灰色
	Mat src = imread("H:/image/1.jpg",IMREAD_GRAYSCALE);
	
	//可以任意改变窗口大小
	namedWindow("输入窗口", WINDOW_FREERATIO);
	imshow("输入窗口", src);
	
	//阻塞
	waitKey(0);
	destroyAllWindows();

第二节课 图像色彩空间转换

主要将图像转换为灰度图片、HSV图片 ———运用cvtColor()函数
以及图片的保存 imwrite()函数

//第二节课 转换图片为 HSV, 灰度、 保存图片
//按顺序来是 B G R  范围是 0-255
void QuickDemo::colorSpace_Demo(Mat &image) {
	Mat gray, hsv;
	//HSV
	//H 0 - 180  S  V 0 - 255
	//H S 决定颜色  V决定亮度
	cvtColor(image, hsv, COLOR_BGR2HSV);
	//灰度
	cvtColor(image, gray, COLOR_BGR2GRAY);
	imshow("HSV", hsv);
	imshow("灰度", gray);
	//保存
	imwrite("H:/image/灰度.jpg", hsv);
}

第三节课 图像对象的创建和赋值

主要讲述了克隆、创建空白图像;单通道、三通道;还有如何获取图像的长、宽、通道
以及直接赋值只是一个指针指向它 一个改变都会改变

//第三节课
void QuickDemo::mat_creation_demo(Mat& image) {
	Mat m1, m2;
	//克隆
	m1 = image.clone();
	image.copyTo(m2);

	//创建空白图像
	//单通道的  千万不能用成多通道的
	//Mat m3 = Mat::ones(Size(8, 8), CV_8UC1);
	//unsigned char 后面数字代表几通道
 	Mat m3 = Mat::zeros(Size(512, 512), CV_8UC3);
	cout << "width:" << m3.cols << "   height:" << m3.rows << "   channels:" << m3.channels() << endl;
	//赋值
	m3 = Scalar(255, 0, 0);
	//cout << m3 << endl;
	imshow("m3", m3);

	//只是一个指针指向它 一个改变都会改变 可以用clone产生一个新的
	Mat m4 = m3;
	m4 = Scalar(0, 255, 0);
	imshow("m3", m3);
}

第四节课 图像像素的读写操作

综合第三节课,对图像进行遍历即可

//第四节课 图像读写操作
void QuickDemo::pixel_visit_demo(Mat &image) {
	int w = image.cols;
	int h = image.rows;
	int dims = image.channels();

	//注释为指针版本
	for (int row = 0; row < h; row++) {
		//uchar* current_row = image.ptr<uchar>(row);
		for (int col = 0; col < w; col++) {
			if (dims == 1) { //单通道
				//int pv = *current_row;
				//*current_row++ = 255 - pv
				int pv = image.at<uchar>(row, col);
				image.at<uchar>(row, col) = 255 - pv;
			}
			if (dims == 3) { //彩色图像
				//取反色
				Vec3b bgr = image.at<Vec3b>(row, col);
				image.at<Vec3b>(row, col)[0] = 255 - bgr[0];
				image.at<Vec3b>(row, col)[1] = 255 - bgr[1];
				image.at<Vec3b>(row, col)[2] = 255 - bgr[2];
			}
		}
	}

	imshow("图像读写演示", image);

}

第五节课 图像的运算操作

利用重载过的运算符或者内置函数对图像进行加减乘除操作

//第五节课 图像色素算数操作
void QuickDemo::operator_demo(Mat &image) {
	imshow("原图",image);
	Mat dst;
	//每个像素点加50 会改变亮度 + - * / 都可以
	//                  对应add(), substrace(), divide()
	//multiply(image, m, dst); 乘法操作 调函数操作 dst = image * m
	dst = image + Scalar(50, 50, 50);
	imshow("加法操作", dst);
}

第六、七节课 滚动条操作

利用createTrackbar() 设置一个进度条,对图片进行亮度事实改变

Mat src, dst, m;
int lightness = 50;
static void on_track(int, void*) {
	m = Scalar(lightness, lightness, lightness);
	add(src, m, dst);
	//addWeighted()
	imshow("亮度调整后", dst);
}

void QuickDemo::tracking_bar_demo(Mat &image) {
	namedWindow("亮度调整", WINDOW_AUTOSIZE);
	dst = Mat::zeros(image.size(), image.type());
	m = Mat::zeros(image.size(), image.type());
	src = image;
	int max_value = 100;
	createTrackbar("Value Bar", "亮度调整", &lightness, max_value, on_track);
	on_track(50, 0);

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值