基于c++的opencv图像处理学习笔记一

这些笔记均是在学习基于c++的opencv图像处理时所做的一些记录,希望可以对大家的学习有帮助。(还是老问题,有些头文件不知道为何放进<>里显示不出来,读者们需要注意)
#include<>iostream
#include
#include
using namespace cv;
using namespace std;
const int g_nMAX = 100;
int g_nAlpha;
double g_dAlpha;
double g_dBeta;
Mat g_image1, g_image2, g_image3;
void on_Trackbar(int, void*)
{
g_dAlpha = (double)g_nAlpha / g_nMAX;
g_dBeta = (1.0 - g_nAlpha);
addWeighted(g_image1, g_dAlpha, g_image2, g_dBeta, 0.0, g_image3);
imshow(“滚动条”, g_image3);
}
int main()
{
g_image1 = imread(“image1.jpg”);
g_image2 = imread(“image2.jpg”);
g_nAlpha = 70;
namedWindow(“滚动条”,WINDOW_NORMAL);
char TrackbarName[50];
sprintf_s(TrackbarName, “透明值 %d”, g_nMAX);
createTrackbar(TrackbarName, “滚动条”, &g_nAlpha, g_nMAX, on_Trackbar);
on_Trackbar(g_nAlpha, 0);
waitKey(0);

//namedWindow("原图",WINDOW_NORMAL);
//imshow("原图", image);
//cout << "nihao" << endl;
//system("pause");
//waitKey(0);
//return 0;
Point2f p(6, 2);
Point3f p3f(8, 3, 0);
vectorv;
v.push_back(3);
v.push_back(0);
cout << Mat(v) << endl;
Mat lookUpTable(1, 256, CV_8U);
uchar* p = lookUpTable.data;
//OutputArray J[256];

//for (int i = 0; i < time(); ++i)
//{
//	LUT(I, lookUpTable, J);
//}
//计时函数
double time0 = static_cast(getTickCount());
time0 = ((double)getTickCount() - time0) / getTickFrequency();
//访问像素
  //1.指针访问:c操作符[]
  //2.迭代器操作元素
/*void colorReduce(Mat& inputImage, Mat& outputImage, int div)
{
	outputImage = inputImage.clone();
	Mat_::iterator it = outputImage.begin();
	Mat_::iterator itend = outputImage.end();
	for (; it != itend; ++it)
	{
		(*it)[0] = (*it)[0] / div * div + div / 2;
		(*it)[1] = (*it)[1] / div * div + div / 2;
		(*it)[2] = (*it)[2] / div * div + div / 2;
	}
}*/
  //3.动态地址计算
//感兴趣区域ROI
//方法一
Mat imageROI;
imageROI = g_image1(Rect(500, 250, g_image2.cols, g_image2.rows));
//方法二
imageROI = g_image3(Range(250, 250 + g_image2.rows), Range(200, 200 + g_image2.cols));
//通道分离:split()函数
Mat srcimage;
Mat imageroi;
vectorchannels;
srcimage = imread("zhuomian.png");
split(srcimage, channels);
imageroi = channels.at(0);
//通道合并:merge()函数
Mat dstimage;
merge(channels, dstimage);
//图像对比度、亮度调整
//访问像素
/*for (int x = 0; x < srcimage.rows; x++)
{
	for (int y = 0; y < srcimage.cols; y++)
	{
		for (int c = 0; c < 3; c++)
		{
			dstimage.at(x, y)[c] = saturate_cast((g_nContrastValue*0.01)*(srcimage.at(x, y)[c]) + g_nBrightValue);
		}
	}
}*/
//dft(src,dst,flags,nonzeroRows=0)函数
//getOptimalDFTSize(int vecsize)返回DFT最优化尺寸大小函数
//copyMakeBorder(src,dst,top,bottom,left,right,borderType,value=Scalar())扩充图像边界
//magnitude(x,y,magnitude)计算二维矢量幅值函数
//log(src,dst)计算自然对数
//normalize(src,dst,alpha=1,beta=0,norm_type=NORM_L2,dtype=-1,mask=noArray())矩阵归一化函数
//FileStorage
//第一种初始化
FileStorage fs("abc.xml", FileStorage::WRITE);
//第二种
FileStorage fs1;
fs.open("abc.yaml", FileStorage::READ);
//文件读写操作
fs << "iteratorNr" << 100;
int itNr;
fs["iteratorNr"] >> itNr;
//opencv数据结构的输入和输出
Mat r = Mat_::eye(3,1);
fs << "r" << r;
fs["r"] >> r;
//vector和maps的输入和输出
//vector
fs << "string" << "[";
fs << "image1.jpg" << "Awesomeness" << "image2.jpg";
fs << "]";
//map
fs << "Mapping";
fs << "{" << "One" << 1;
fs << "Two" << 2 << "}";
FileNode n = fs["string"];
if (n.type() != FileNode::SEQ)
{
	cout << "错误" << endl;
	return 1;
}
FileNodeIterator it = n.begin(), it_end = n.end();
for (; it != it_end; it++)
{
	cout << (string)*it << endl;
}
//关闭文件(自动)
fs.release();




return 0;

}

你可能感兴趣的:(图像处理)