opencv示例程序
来源:互联网 发布:java培训包就业 编辑:程序博客网 时间:2024/04/29 04:12
读取图片,在窗口中显示View CodeView CodeView Code
#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);}
初级图像混合
//-----------------------------------【头文件包含部分】---------------------------------------// 描述:包含程序所依赖的头文件//---------------------------------------------------------------------------------------------- #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;}
人脸检测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;}
0 0
- opencv示例程序
- opencv示例程序
- OpenCV 光流示例程序
- opencv 2.4.4版本示例程序说明
- OpenCV初探:一、windows桌面程序示例
- OpenCV初探:二、Android程序示例
- opencv 示例
- OpenCV 图像对比度、亮度值调整示例程序
- 树莓派安装OpenCV后的示例小程序Python
- 初步学习opencv的几个程序示例 学习笔记
- 示例程序
- OpenCV简单示例
- OpenCV直方图用法示例
- OpenCV直方图用法示例
- OpenCV示例1
- OpenCV示例2
- OpenCV示例2
- OpenCV显示图片示例
- java编写spark程序
- Python机器学习实战之逻辑回归
- SQL示例
- jdbc示例
- opencv基本函数
- opencv示例程序
- InputStream小节
- 用Highcharts画曲线图的时间轴问题
- //面试(java基础)
- 系统一致性介绍
- android中wifi输入的密码保存的路径
- 将java文件打包提交MapReduce任务流程
- Spark集群部署流程
- Git最佳实践与常见问题