OpenCv练习
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <iostream>
//OpenCV核心库头文件
#include <opencv2\core\core.hpp>
//OpenCV图形处理头文件
#include <opencv2\highgui\highgui.hpp>
#include "opencv2\opencv.hpp" //OpenCV核心动态链接库,和core.hpp头文件对应,d代表调试版本
#pragma comment(lib,"opencv_core249d.lib")
//OpenCV图形处理动态链接库,和highgui.hpp头文件对应,d代表调试版本
#pragma comment(lib,"opencv_highgui249d.lib") #pragma comment(lib,"opencv_video249d.lib")
#pragma comment(lib,"opencv_imgproc249d.lib") int test_0()
{
//窗口名称
std::string windowName = "HelloWorld";
//图像名称
std::string imgFile = "opencv-logo.png";
//读入图像
cv::Mat image = cv::imread(imgFile);
//如果无法读取图形
if(!image.data)
{
std::cout << "无法打开图像文件" <<std::endl;
system("PAUSE");//暂停窗口
return -;
}
//创建一个新窗口
cv::namedWindow(windowName);
//将图像显示都新创建的窗口中
cv::imshow(windowName,image);
//等待,直到用户按任意键时退出
cv::waitKey();
} void saturate_sv(IplImage* img)
{
for ( int y = ; y < img->height; y++ ){
uchar* ptr = (uchar*)(img->imageData + y * img->widthStep);
for ( int x = ; x < img->width; x++ ){
ptr[*x + ] = ;
ptr[*x + ] = ;
}
}
} void test_1()
{ IplImage *img = cvLoadImage("opencv-logo.png");
saturate_sv(img);
cvNamedWindow("Example",CV_WINDOW_AUTOSIZE);
cvShowImage("Example", img);
cvWaitKey();//让程序暂停
cvReleaseImage(&img);
cvDestroyWindow("Example"); } /////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
//播放视频
void test_2()
{
cvNamedWindow("demo2",CV_WINDOW_AUTOSIZE);
CvCapture* capture = cvCreateFileCapture("01-上一次课程复习_.avi");
IplImage* frame;
while(){
frame = cvQueryFrame( capture );
if ( !frame ) break;
cvShowImage("demo2",frame);
char c = cvWaitKey();
if( c == ) break;// esc ASCII
}
cvWaitKey();//让程序暂停
cvReleaseCapture( &capture );
cvDestroyWindow("demo2");
}
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
int g_slider_position = ;
CvCapture *g_capture = NULL; void onTrackbarSlider(int pos)
{
cvSetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES,pos);
} // 显示进度条
void test_03()
{
cvNamedWindow("demo3",CV_WINDOW_AUTOSIZE);
g_capture = cvCreateFileCapture("01-上一次课程复习_.avi");
int frames = (int)cvGetCaptureProperty(g_capture,CV_CAP_PROP_FRAME_COUNT);
if ( frames != ){
cvCreateTrackbar("position","demo3",&g_slider_position,frames,onTrackbarSlider);
}
IplImage* frame;
while(){
frame = cvQueryFrame( g_capture );
if ( !frame ) break;
cvShowImage("demo3",frame);
char c = cvWaitKey();
if( c == ) break;// esc ASCII
}
cvWaitKey();//让程序暂停
cvReleaseCapture( &g_capture );
cvDestroyWindow("demo3");
}
///////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
//载入一幅图像进行平滑处理 void test_04(IplImage* image)
{
// create some windows to show the input and output image in
cvNamedWindow("demo4-in");
cvNamedWindow("demo4-out"); // create a window to show our input image
cvShowImage("demo4-in",image); // create an image to hold the smoothed output
IplImage* out = cvCreateImage(cvGetSize(image),IPL_DEPTH_8U,); // do the smoothing
cvSmooth(image, out, CV_GAUSSIAN, , ); cvShowImage("demo4-out",out); // be tidy
cvReleaseImage(&out); cvWaitKey();//让程序暂停
cvDestroyWindow("demo4-in");
cvDestroyWindow("demo4-out");
} // 创建一副宽度和高度尺寸为输入的一半的图像
IplImage* doPryDown(IplImage* in, int filter = CV_GAUSSIAN_5x5)
{
// assert(in->width % 2 == 0 && in->height % 2 == 0);
IplImage* out = cvCreateImage(cvSize(in->width/, in->height/), in->depth, in->nChannels);
cvPyrDown(in, out);
return out;
} // Canny 边缘检测将输出写入一个单通道(灰度级)图像
//边缘检测器产生一个与尺寸输入大小相同,但是只有一个通道的图像
IplImage* doCanny(IplImage* in, double lowThresh, double highThresh, double aperture)
{
if ( in->nChannels != )
return ;
IplImage* out = cvCreateImage(cvSize( in->width, in->height ), IPL_DEPTH_8U, );
cvCanny(in, out, lowThresh, highThresh, aperture);
return out;
} // 写入AVI视频文件
void test_05()
{
CvCapture* capture = ;
capture = cvCreateFileCapture("01-上一次课程复习_.avi");
IplImage* bgr_frame = cvQueryFrame(capture);
double fps = cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
CvSize size = cvSize((int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH), (int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT)); CvVideoWriter* writer = cvCreateVideoWriter("hello.avi", CV_FOURCC('M','J','P','G'), fps, size);
IplImage* logpolar_frame = cvCreateImage(size, IPL_DEPTH_8U, );
std::cout << "while" << std::endl;
while( (bgr_frame = cvQueryFrame(capture)) != NULL ){
std::cout << "enter while" << std::endl;
CvPoint2D32f temp;
temp.x = bgr_frame->width/;
temp.y = bgr_frame->height/;
cvLogPolar(bgr_frame, logpolar_frame, temp, , CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS);
cvWriteFrame( writer, logpolar_frame );
}
std::cout << "endl" << std::endl;
cvReleaseVideoWriter(&writer);
cvReleaseImage(&logpolar_frame);
cvReleaseCapture(&capture); } // 矩阵和图像类型
void test_06()
{
float vals[] = { 0.866600, -0.522200, 0.522200, -0.866600 }; CvMat rotmat; cvInitMatHeader( &rotmat, , , CV_32FC1, vals ); CvMat* mat_ptr = cvCreateMat(, , CV_32FC1);
float elem = 7.7;
*((float*)CV_MAT_ELEM_PTR(*mat_ptr,,)) = elem;
} int _tmain(int argc, _TCHAR* argv[])
{
//IplImage *img = cvLoadImage("opencv-logo.png");
//IplImage *img1 = doPryDown(img);
//IplImage *img2 = doPryDown(img1);
//IplImage *img3 = doCanny(img2, 10, 100, 3);
test_1(); return ;
}
OpenCv练习的更多相关文章
- opencv在图像显示中文
在图像定位和模式识别时,经常需要把结果标注到图片上,标注内容可以是数字字母.矩形框等(opencv支持的)或者是中文汉字(借助freetype). 1.显示数字/矩形框 #include <op ...
- opencv中Mat与IplImage,CVMat类型之间转换
opencv中对图像的处理是最基本的操作,一般的图像类型为IplImage类型,但是当我们对图像进行处理的时候,多数都是对像素矩阵进行处理,所以这三个类型之间的转换会对我们的工作带来便利. Mat类型 ...
- opencv源码:cascadedetect
级联分类器检测类CascadeClassifier,提供了两个重要的方法: CascadeClassifier cascade_classifier; cascade_classifier.load( ...
- 基于OpenCV的车辆检测与追踪的实现
最近老师布置了一个作业,是做一个基于视频的车辆检测与追踪,用了大概两周的时间做了一个简单的,效果不是很理想,但抑制不住想把自己的一些认识写下来,这里就把一些网络上的博客整理一下分享给大家,希望帮助到大 ...
- OpenCV人脸识别Eigen算法源码分析
1 理论基础 学习Eigen人脸识别算法需要了解一下它用到的几个理论基础,现总结如下: 1.1 协方差矩阵 首先需要了解一下公式: 共公式可以看出:均值描述的是样本集合的平均值,而标准差描述的则是样本 ...
- OpenCV人脸识别LBPH算法源码分析
1 背景及理论基础 人脸识别是指将一个需要识别的人脸和人脸库中的某个人脸对应起来(类似于指纹识别),目的是完成识别功能,该术语需要和人脸检测进行区分,人脸检测是在一张图片中把人脸定位出来,完成的是搜寻 ...
- OpenCV模板匹配算法详解
1 理论介绍 模板匹配是在一幅图像中寻找一个特定目标的方法之一,这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否“相似”,当相似度足够高时,就认为找到了我们的目标.OpenCV ...
- android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测
目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. (原创:转载声明出处:http://www.cnblogs.com/lin ...
- 海康网络摄像机YV12转换为BGR,由opencv Mat显示 (转)
我使用的是海康DS-2CD852MF-E, 200万,网络摄像机,已经比较老了,不过SDK在海康官网下载的,开发流程都差不多. 海康摄像机回调解码后的视频数据格式为YV12,顺便说一下YV12的数据格 ...
- Android Studio-—使用OpenCV的配置方法和demo以及开发过程中遇到的问题解决
前提: 1.安装Android Studio(过程略) 2.官网下载OpenCV for Android 网址:http:opencv.org/downloads.html 我下载的是下图的版本 3. ...
随机推荐
- 牛客训练赛25-A-最长区间
https://www.nowcoder.com/acm/contest/158#question 这题问最长的严格连续递增序列的最长长度是多少? 最开始感觉这道题不可做,因为有1e5个点,还有1e5 ...
- C. Sequence Transformation
链接 [http://codeforces.com/contest/1059/problem/C] 题意 给你一个n,有个序列有n个元素分别时1 ~ n,每次去掉一个元素输出剩下元素的GCD,使得最后 ...
- 软件工程驻足篇章:第十七周和BugPhobia团队漫长的道别
0x01 :序言 I am a slow walker, but I never walk backwards. 成长于被爱,学着爱人 成长的故事 也是年少的星期六结束的故事 就仿佛我和BugPhob ...
- Scrum Meeting 8
第八次会议 No_00:工作情况 No_01:任务说明 待完成 已完成 No_10:燃尽图 No_11:照片记录 待更新 No_100:代码/文档签入记录 No_101:出席表 ...
- [BUAA软工]第一次结对作业
[BUAA软工]结对作业 本次作业所属课程: 2019BUAA软件工程 本次作业要求: 结对项目 我在本课程的目标: 熟悉结对合作,为团队合作打下基础 本次作业的帮助:理解一个c++ 项目的开发历程 ...
- 20135323符运锦期中总结----Linux系统的理解及学习心得
一.网易云课堂 1.各章节总结 第一周:计算机是如何工作的http://www.cnblogs.com/20135323fuyunjin/p/5222787.html 第二周:操作系统是如何工作的ht ...
- RedisDump安装报错
环境:win10 首先安装 Ruby 安装好后,使用命令行 gem install redis-dump 在安装过程中始终报错,意思是无法使用make命令 然后安装make 参考教程: http:// ...
- 实验1--用C语言编程四则运算
#include<stdio.h>#include<stdlib.h>#include <time.h>#define N 30main(){int a,b,k,i ...
- 男神女神配——alpha阶段总结
一.需求分析 虽然公共社交网络系统能够满足大多数高校校园用户在校园网络社交的需求,但是针对校园学习.工作和文化生活等方面的支持以及学校个性化需求方面却存在不足.利用电子校务平台的数据,设计了与真实校园 ...
- Find Amir CodeForces - 805C (贪心+思维)
A few years ago Sajjad left his school and register to another one due to security reasons. Now he w ...