opencv示例程序

来源:互联网 发布:java培训包就业 编辑:程序博客网 时间:2024/04/29 04:12
读取图片,在窗口中显示

#include<iostream>#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>using namespace cv;int main(){                 // 读??入??一??张?图??片?(???游??戏??原-画-)??                Mat img=imread( "pic.jpg");                 // 创???建??一??个?名?为a "游??戏??原-画-"窗???口??                namedWindow( "游??戏??原-画-" );                 // 在??窗???口??中D显?示??游??戏??原-画-                imshow( "游??戏??原-画-" ,img);                 // 等???待?y6000 ms后??窗???口??自??动??关?闭??                waitKey(6000);}
View Code

 

初级图像混合

//-----------------------------------【头文件包含部分】---------------------------------------//     描述:包含程序所依赖的头文件//----------------------------------------------------------------------------------------------                                                                                   #include <cv.h>#include <highgui.h>#include <iostream>//-----------------------------------【命名空间声明部分】---------------------------------------//     描述:包含程序所使用的命名空间//----------------------------------------------------------------------------------------------- using namespace cv;using namespace std;//-----------------------------------【全局函数声明部分】--------------------------------------//     描述:全局函数声明//-----------------------------------------------------------------------------------------------bool ROI_AddImage();bool LinearBlending();bool ROI_LinearBlending();//-----------------------------------【main( )函数】--------------------------------------------//     描述:控制台应用程序的入口函数,我们的程序从这里开始//-----------------------------------------------------------------------------------------------int main(  ){       system("color 5E");       if(ROI_AddImage()&& LinearBlending( )&&ROI_LinearBlending( ))       {              cout<<endl<<"嗯。好了,得出了你需要的图像~! : )";       }       waitKey(0);       return 0;}//----------------------------------【ROI_AddImage( )函数】----------------------------------// 函数名:ROI_AddImage()//     描述:利用感兴趣区域ROI实现图像叠加//----------------------------------------------------------------------------------------------bool ROI_AddImage(){       //【1】读入图像       Mat srcImage1= imread("dota_pa.jpg");       Mat logoImage= imread("dota_logo.jpg");       if(!srcImage1.data ) { printf("你妹,读取srcImage1错误~! \n"); return false; }       if(!logoImage.data ) { printf("你妹,读取logoImage错误~! \n"); return false; }       //【2】定义一个Mat类型并给其设定ROI区域       Mat imageROI= srcImage1(Rect(200,250,logoImage.cols,logoImage.rows));       //【3】加载掩模(必须是灰度图)       Mat mask= imread("dota_logo.jpg",0);       //【4】将掩膜拷贝到ROI       logoImage.copyTo(imageROI,mask);       //【5】显示结果       namedWindow("<1>利用ROI实现图像叠加示例窗口");       imshow("<1>利用ROI实现图像叠加示例窗口",srcImage1);       return true;}//---------------------------------【LinearBlending()函数】-------------------------------------// 函数名:LinearBlending()// 描述:利用cv::addWeighted()函数实现图像线性混合//--------------------------------------------------------------------------------------------bool LinearBlending(){       //【0】定义一些局部变量       double alphaValue = 0.5;       double betaValue;       Mat srcImage2, srcImage3, dstImage;       //【1】读取图像 ( 两幅图片需为同样的类型和尺寸 )       srcImage2= imread("mogu.jpg");       srcImage3= imread("rain.jpg");       if(!srcImage2.data ) { printf("你妹,读取srcImage2错误~! \n"); return false; }       if(!srcImage3.data ) { printf("你妹,读取srcImage3错误~! \n"); return false; }       //【2】进行图像混合加权操作       betaValue= ( 1.0 - alphaValue );       addWeighted(srcImage2, alphaValue, srcImage3, betaValue, 0.0, dstImage);       //【3】创建并显示原图窗口       namedWindow("<2>线性混合示例窗口【原图】 by浅墨", 1);       imshow("<2>线性混合示例窗口【原图】 by浅墨", srcImage2 );       namedWindow("<3>线性混合示例窗口【效果图】 by浅墨", 1);       imshow("<3>线性混合示例窗口【效果图】 by浅墨", dstImage );       return true;     }//---------------------------------【ROI_LinearBlending()】-------------------------------------// 函数名:ROI_LinearBlending()// 描述:线性混合实现函数,指定区域线性图像混合.利用cv::addWeighted()函数结合定义//                     感兴趣区域ROI,实现自定义区域的线性混合//--------------------------------------------------------------------------------------------bool ROI_LinearBlending(){       //【1】读取图像       Mat srcImage4= imread("dota_pa.jpg",1);       Mat logoImage= imread("dota_logo.jpg");       if(!srcImage4.data ) { printf("你妹,读取srcImage4错误~! \n"); return false; }       if(!logoImage.data ) { printf("你妹,读取logoImage错误~! \n"); return false; }       //【2】定义一个Mat类型并给其设定ROI区域       Mat imageROI;              //方法一       imageROI=srcImage4(Rect(200,250,logoImage.cols,logoImage.rows));       //方法二       //imageROI=srcImage4(Range(250,250+logoImage.rows),Range(200,200+logoImage.cols));       //【3】将logo加到原图上       addWeighted(imageROI,0.5,logoImage,0.3,0.,imageROI);       //【4】显示结果       namedWindow("<4>区域线性图像混合示例窗口 by浅墨");       imshow("<4>区域线性图像混合示例窗口 by浅墨",srcImage4);            return true;}
View Code

 

人脸检测opencv样例程序

/*** @file objectDetection_img.cpp* @author:wepon* @blog: http://2hwp.com* 这个demo使用opencv实现图片的人脸检测、以及绘画框出人脸、截取人脸等功能。* 每个功能写成一个函数,方便移植使用。* 参考:opencv基本绘画、物体检测模块文档。*/#include "opencv2\core\core.hpp"#include "opencv2\imgproc\imgproc.hpp"#include"opencv2\highgui\highgui.hpp"#include "opencv2\objdetect\objdetect.hpp"#include<sstream>#include<string>using namespace cv;using namespace std;/*---- detectFaces函数 -------检测灰度图片中的人脸,返回人脸矩形坐标(x,y,width,height)因为可能检测出多个人脸,所以返回类型为vetor<Rect>------------------------------------------------------*/vector<Rect> detectFaces(Mat img_gray){     CascadeClassifier faces_cascade;     faces_cascade.load("haarcascade_frontalface_alt.xml");     vector<Rect> faces;     faces_cascade.detectMultiScale(img_gray,faces,1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );     return faces;}/*----  drawFaces函数 -------在原始图片中用椭圆形圈出人脸------------------------------------------------------*/void drawFaces(Mat img,vector<Rect> faces){     namedWindow("draw faces");     for(size_t i=0;i<faces.size();i++){          //先确定人脸矩形中心坐标,再根据该坐标画椭圆          Point center(faces[i].x + faces[i].width/2,faces[i].y + faces[i].height/2);          ellipse(img,center,Size(faces[i].width/2,faces[i].height/1.5),0,0,360,Scalar(0,255,0),2,8,0);     }     imshow("draw faces",img);}/*----  saveFaces函数 -------用detectFaces函数检测出人脸区域,然后保存这些人脸。保存路径以及保存文件名设置为saveName,按序号依次命名,存于D盘的faces文件夹下(faces文件夹需事先创建)。------------------------------------------------------*/void saveFaces(Mat img,vector<Rect> faces){     for(size_t i=0; i<faces.size();i++){          stringstream buffer;          buffer<<i;          string saveName = "D:/faces/"+ buffer.str() + ".jpg";          Rect roi = faces[i];          imwrite(saveName,img(roi));     }}/*----  detectDrawEyes函数 -------检测并用圆形画出眼睛区域。先用detectFaces函数检测出人脸区域,然后再在这些人脸区域检测眼睛,这样做既可以增加精确度又可以节省计算量。------------------------------------------------------*/void detectDrawEyes(Mat img,Mat img_gray){     vector<Rect> faces = detectFaces(img_gray);     for(size_t i=0; i<faces.size();i++){          Mat faceROI = img_gray(faces[i]);          CascadeClassifier eyes_cascade;          eyes_cascade.load("haarcascade_eye.xml");          vector<Rect> eyes;          eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CV_HAAR_SCALE_IMAGE, Size(30, 30) );          //用圆形框出眼睛区域          for(size_t j=0;j<eyes.size();j++){               Point eyes_center(faces[i].x+eyes[j].x+eyes[j].width/2,faces[i].y+eyes[j].y+eyes[j].height/2);               int r = cvRound((eyes[j].width + eyes[j].height)*0.25);               circle(img,eyes_center,r,Scalar(255,0,0),1,8,0);          }     }     namedWindow("detect and draw eyes");     imshow("detect and draw eyes",img);}int main(){     //读取图像,转化为灰度图,再进行直方图均衡化     Mat img = imread("obama.jpg");     Mat img_gray;     cvtColor(img,img_gray,COLOR_BGR2GRAY );     equalizeHist(img_gray,img_gray);     //检测人脸,保存人脸,画出人脸,画出眼睛     vector<Rect> faces = detectFaces(img_gray);     saveFaces(img,faces);     drawFaces(img,faces);//     detectDrawEyes(img,img_gray);     waitKey(0);     return 0;}
View Code

 

0 0
原创粉丝点击