OpenCV Core组件操作

最近在复习opencv,整理一下基础知识。今天把Core组件的相关操作记录下来,常用的操作有以下几个:

Mat结构体

 

访问像素

Matimage;

Uchar*data = image.ptr<uchar>(i);

 

Mat_<Vec3b>::iteratorit = image.begin<Vec3b>();

(*it)[0];

 

Image.at<Vec3b>(i,j)[0];

图像叠加、混合

Matimage;

Image= iamge(Rect(500,250,logo.cols,log.rows));

Image= image(Range(250,250+logoimage.rows), Range(250,250+logoimage.cols));

logoImage.copyTo(image,mask);

addWeighted();

通道分离、合并

Spilt();

Merge();

对比度、亮度调节

 

下面记录一个VS下面的例子,方便以后利用、查看。

#include<iostream>
#include "classify.h"
#include<math.h>
#define max(a,b) a>b?a:b
using namespace std;
#define WINDOW_NAME "融合"
int g_nAl = 0;
void on_Trackbar(int a, void* c)		//添加进度条
{
	cv::Mat image1 = cv::imread("D:\\OpenCVprivate\\4.jpg");
	cv::resize(image1, image1, cv::Size(720, 1280), 0.0, 0.0, CV_INTER_NN);
	cv::Mat imageResult;
	cv::Mat image2 = cv::Mat::zeros(image1.size(), image1.type());
	try
	{
		addWeighted(image1, g_nAl / 100.0, image2, 1 - g_nAl / 100.0, 20.0, imageResult);
	}	
	catch (...)
	{
		
	}
	cv::imshow("WINDOW_NAME", imageResult);
	cv::waitKey(10);
}

void imageAdd()//图像融合
{
	cv::Mat image1 = cv::imread("D:\\OpenCVprivate\\3.jpg");
	cv::Mat image2 = cv::imread("D:\\OpenCVprivate\\5.jpg");
	cv::Mat image3 = cv::imread("D:\\OpenCVprivate\\4.jpg");
	cv::resize(image1, image1, cv::Size(869, 1200), 0.0, 0.0, CV_INTER_NN);
	cv::resize(image2, image2, cv::Size(300, 250), 0.0, 0.0, CV_INTER_NN);
	cv::resize(image3, image3, cv::Size(869, 1200), 0.0, 0.0, CV_INTER_NN);
	cv::Mat image4 = image1(cv::Rect(500, 300, image2.cols, image2.rows));
	image2 = cv::min(image4, image2);
	image2.copyTo(image4, cv::Mat());
	cv::imshow("result", image1);
	addWeighted(image1, 0.5, image3, 0.5, 0.0, image1);
	cv::imshow("图像融合", image1);
	cv::waitKey();
}

void splitMerge()//通道分离、合并
{
	cv::Mat image1 = cv::imread("D:\\OpenCVprivate\\7.jpg");
	cv::Mat image2 = cv::imread("D:\\OpenCVprivate\\11.jpg");
	cv::Mat image3 = cv::imread("D:\\OpenCVprivate\\12.jpg");
	cv::resize(image2, image2, cv::Size(869, 1200), 0.0, 0.0, CV_INTER_NN);
	cv::resize(image1, image1, cv::Size(869, 1200), 0.0, 0.0, CV_INTER_NN);
	cv::resize(image3, image3, cv::Size(869, 1200), 0.0, 0.0, CV_INTER_NN);
	cv::Mat image4;
	cv::Mat spilt1[3];
	cv::Mat spilt2[3];
	cv::Mat spilt3[3];
	split(image1, spilt1);
	split(image2, spilt2);
	split(image3, spilt3);
	spilt1[2] = spilt1[2];
	spilt1[2] = spilt3[2];
	merge(spilt1, 3, image4);
	cv::imshow("分离、合并", image4);
	cv::waitKey();
}

void brightnessContrast(int value, int value2)		//亮度对比度调节
{
	cv::Mat image = cv::imread("D:\\OpenCVprivate\\3.jpg");
	image.rowRange(0, 10).setTo(cv::Scalar(0));
	image.colRange(image.cols - 10, image.cols).setTo(cv::Scalar(0));
	image.colRange(0, 10).setTo(cv::Scalar(0));
	image.rowRange(image.rows - 10, image.rows).setTo(cv::Scalar(0));
	for (int y = 10; y < image.rows - 10; y++)
	for (int x = 10; x < image.cols - 10; x++)
	for (int c = 0; c < image.channels(); c++)
	{
		image.at<cv::Vec3b>(y, x)[c] = MIN((value*0.01)*(image.at<cv::Vec3b>(y, x)[c] + value2), 255);
		image.at<cv::Vec3b>(y, x)[c] = MAX(image.at<cv::Vec3b>(y, x)[c], 0);
	}
	cv::imshow("亮度对比度", image);
	cv::waitKey();
}

int main()
{
	imageAdd();
	splitMerge();
	brightnessContrast(120,0);//修改图像对比度(120%),亮度(+0)
	
	g_nAl = 70;
	double g_nMax = 100;
	cv::namedWindow(WINDOW_NAME,1);
	cv::createTrackbar("name:",WINDOW_NAME,&g_nAl,g_nMax,on_Trackbar); 	
	cv::waitKey();
	return 0;
}
正常运行是没问题,知识没有整理,看起来会有些不舒服。好在代码不多,有时间在整理吧
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值