opencv c++浅学习

Picture reading and display

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
	Mat src = imread("D:\\visual studio\\c++ opencv\\image information\\lena.jpg");
	if (src.empty()) {
		printf("could not load image...\n");
		return -1;
	}
	//实现窗口可调
	namedWindow("输入窗口",WINDOW_FREERATIO);
	imshow("输入窗口", src);
	waitKey(0);
	destroyAllWindows();
	return 0;

}

Image color space conversion

#include<opencv2/opencv.hpp>
#include<quickopencv.h>
//色彩空间转换函数-cvtColor
//COLOR_BGR2GRAY = 6彩度到灰度
//COLOR_GRAY2BGR = 8灰度到彩色
//COLOR_BGR2HSV = 40 BGR 到 HSV
//COLOR_HSV2BGR = 54 HSV 到 BGR
//图像保存-imwrite
//第一个参数是图像保存路径
//第二个参数是图像内存对象
int main(int argc,char** argv) {
	Mat src = imread("D:\\visual studio\\c++ opencv\\image information\\lena.jpg");
	if (src.empty()) {
		printf("could not load image....\n");
		return -1;
		}
	//namedWindow("输入窗口", WINDOW_FREERATIO);
	imshow("输入窗口", src);//imshow 必须是8位
	QuickDemo qd;
	qd.colorSpace_Demo(src);
	waitKey(0);
	destroyAllWindows();
	return 0;
}

Creation and assignment of image objects.cpp

#include<quickopencv.h>
int main(int argc,char** argv) {
	Mat src = imread("D:\\visual studio\\c++ opencv\\image information\\lena.jpg");
	if (src.empty()) {
		printf("could not load image....\n");
		return -1;
	}
	QuickDemo qd;
	qd.pixel_visit_demo(src);
	waitKey(0);
	destroyAllWindows();

quickopencv.cpp

#include<quickopencv.h>
void QuickDemo::colorSpace_Demo(Mat& image) {
	Mat gray, hsv;
	cvtColor(image, hsv, COLOR_BGR2HSV);
	cvtColor(image, gray, COLOR_BGR2GRAY);
	imshow("HSV", hsv);
	imshow("gray", gray);
	imwrite("D:\\visual studio\\c++ opencv\\hsv\\hsv.png",hsv);
	imwrite("D:\\visual studio\\c++ opencv\\gray\\gray.png", gray);
}
void QuickDemo::mat_creation_Demo(Mat& image) {
	Mat m1, m2;
	m1 = image.clone();
	image.copyTo(m2);

	//创建空白对象
	Mat m3 = Mat::zeros(Size(400, 400), CV_8UC3);
	//CV_8UC3 3个通道 3*8*8  m3.clos:宽度 m3.rows:高度 m3.channels:通道数
	//Mat::ones(Size(8, 8))都是1,不过对于CV_8UC3来说是第一个位置为1
	//m3 = Scalar(127,127,127);三个通道都赋值127
	m3 = Scalar(0, 0, 255);//红色  BGR
	//std::cout << m3 << std::endl;
	imshow("图像",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++) {
		for (int col = 0;col < w;col++) {
			if (dims == 1) {
				int pv = image.at<uchar>(row,col);
				image.at<uchar>(row, col) = 255 - pv;
			}
			if (dims == 3) {
				Vec3d 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::operators_demo(Mat& image) {
	Mat dst;
	imshow("原图像", image);
	dst = image + Scalar(50, 50, 50);
	imshow("加法操作", dst);
	//dst = image - Scalar(50,50,50);
	//dst = image / Scalar(2, 2, 2);
	//乘法
	imshow("加法操作",dst);
	Mat m = Mat::zeros(image.size(), image.type());
	m = Scalar(2, 2, 2);
	multiply(image, m, dst);//乘法
	//除法 divide(image, m ,dst);
	imshow("乘法操作", dst);
	/*加法操作另一种写法
	Mat dst = Mat::zeros(image.size(), image.type());;
	Mat m = Mat::zeros(image.size(), image.type());
	m = Scalar(2, 2, 2);
	int w = image.cols;
	int h = image.rows;
	int dims = image.channels();
	for (int row = 0;row < h;row++) {
		for (int col = 0;col < w;col++) {
			Vec3b p1 = image.at<Vec3b>(row, col);
			Vec3b p2 = m.at<Vec3b>(row, col);
			dst.at<Vec3b>(row, col)[0] = saturate_cast<uchar>(p1[0] + p2[0]);
			dst.at<Vec3b>(row, col)[1] = saturate_cast<uchar>(p1[1] + p2[1]);
			dst.at<Vec3b>(row, col)[2] = saturate_cast<uchar>(p1[2] + p2[2]);
		}
	}
	*/
}
Mat src, dst, m;
int lightness = 50;
static void on_track(int, void*) {
	m = Scalar(lightness, lightness, lightness);
	add(src, m, dst);//subtract(src, m, dst);
	imshow("亮度调整", dst);
}

void QuickDemo::tracking_bar_demo(Mat& image) {
	namedWindow("亮度调整", WINDOW_FREERATIO);
	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);
}

quickopencv.h

#pragma once
#include <opencv2/opencv.hpp>
using namespace cv;
class QuickDemo{
	public:
		void colorSpace_Demo(Mat &image);
		void mat_creation_Demo(Mat& image);
		void pixel_visit_demo(Mat& image);
		void operators_demo(Mat &image);
		void tracking_bar_demo(Mat& image);
};

Read and write operations on image pixels

#include<quickopencv.h>
int main(int argc, char** argv) {
	Mat src = imread("D:\\visual studio\\c++ opencv\\image information\\lena.jpg");
	if (src.empty()) {
		printf("could not load image....\n");
		return -1;
	}
	imshow("原图像", src);
	QuickDemo qd;
	qd.pixel_visit_demo(src);
	waitKey(0);
	destroyAllWindows();
}

滚动条操作-调整图像亮度

#include<quickopencv.h>
int main(int argc, char** argv) {
	Mat src = imread("D:\\visual studio\\c++ opencv\\image information\\jx.jpg");
	if (src.empty()) {
		printf("could not load image....\n");
		return -1;
	}
	namedWindow("原图像", WINDOW_FREERATIO);
	imshow("原图像", src);
	QuickDemo qd;
	qd.tracking_bar_demo(src);
	waitKey(0);
	destroyAllWindows();
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值