// 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练习的更多相关文章

  1. opencv在图像显示中文

    在图像定位和模式识别时,经常需要把结果标注到图片上,标注内容可以是数字字母.矩形框等(opencv支持的)或者是中文汉字(借助freetype). 1.显示数字/矩形框 #include <op ...

  2. opencv中Mat与IplImage,CVMat类型之间转换

    opencv中对图像的处理是最基本的操作,一般的图像类型为IplImage类型,但是当我们对图像进行处理的时候,多数都是对像素矩阵进行处理,所以这三个类型之间的转换会对我们的工作带来便利. Mat类型 ...

  3. opencv源码:cascadedetect

    级联分类器检测类CascadeClassifier,提供了两个重要的方法: CascadeClassifier cascade_classifier; cascade_classifier.load( ...

  4. 基于OpenCV的车辆检测与追踪的实现

    最近老师布置了一个作业,是做一个基于视频的车辆检测与追踪,用了大概两周的时间做了一个简单的,效果不是很理想,但抑制不住想把自己的一些认识写下来,这里就把一些网络上的博客整理一下分享给大家,希望帮助到大 ...

  5. OpenCV人脸识别Eigen算法源码分析

    1 理论基础 学习Eigen人脸识别算法需要了解一下它用到的几个理论基础,现总结如下: 1.1 协方差矩阵 首先需要了解一下公式: 共公式可以看出:均值描述的是样本集合的平均值,而标准差描述的则是样本 ...

  6. OpenCV人脸识别LBPH算法源码分析

    1 背景及理论基础 人脸识别是指将一个需要识别的人脸和人脸库中的某个人脸对应起来(类似于指纹识别),目的是完成识别功能,该术语需要和人脸检测进行区分,人脸检测是在一张图片中把人脸定位出来,完成的是搜寻 ...

  7. OpenCV模板匹配算法详解

    1 理论介绍 模板匹配是在一幅图像中寻找一个特定目标的方法之一,这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否“相似”,当相似度足够高时,就认为找到了我们的目标.OpenCV ...

  8. android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测

    目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. (原创:转载声明出处:http://www.cnblogs.com/lin ...

  9. 海康网络摄像机YV12转换为BGR,由opencv Mat显示 (转)

    我使用的是海康DS-2CD852MF-E, 200万,网络摄像机,已经比较老了,不过SDK在海康官网下载的,开发流程都差不多. 海康摄像机回调解码后的视频数据格式为YV12,顺便说一下YV12的数据格 ...

  10. Android Studio-—使用OpenCV的配置方法和demo以及开发过程中遇到的问题解决

    前提: 1.安装Android Studio(过程略) 2.官网下载OpenCV for Android 网址:http:opencv.org/downloads.html 我下载的是下图的版本 3. ...

随机推荐

  1. 跨平台、跨语言应用开发,Elements 介绍

    目录 1,Elements 介绍 2,Elements 版本 3,Elements 能干嘛 4,Elements  IDES 5,Elements 工具 1,Elements 介绍 RemObject ...

  2. mysql下批量清空某个库下的所有表(库不要删除,保留空库)

    总所周知,mysql下要想删除某个库下的某张表,只需要切换到该库下,执行语句"drop table tablename"即可删除!但若是该库下有成百上千张表,要是再这样一次次执行d ...

  3. Redis哨兵模式(sentinel)学习总结及部署记录(主从复制、读写分离、主从切换)

    Redis的集群方案大致有三种:1)redis cluster集群方案:2)master/slave主从方案:3)哨兵模式来进行主从替换以及故障恢复. 一.sentinel哨兵模式介绍Sentinel ...

  4. Centos7.2下OpenVPN 环境完整部署记录

    关于OpenVPN的有关介绍及为何使用OpenVPN在此就不做赘述了,下面直接记录Centos7.2系统下部署OpenVPN环境的操作过程: 1) 先将本机的yum换成阿里云的yum源 [root@t ...

  5. 在Mac终端显示 Git 当前所在分支

    1.进入你的home目录 cd ~ 2.编辑.bashrc文件 vi .bashrc 3.将下面的代码加入到文件的最后处 function git_branch { branch="`git ...

  6. NSCache的简单使用

    简介 1)NSCache 是苹果官方提供的缓存类,用法与 NSMutableDictionary 的用法很相似,在 AFNetworking 和 SDWebImage 中,使用它来管理缓存. 2)NS ...

  7. 2017乌鲁木齐区域赛D题Fence Building-平面图的欧拉公式

    这个题B站上面有这题很完整的分析和证明,你实在不懂,可以看看这个视频  https://www.bilibili.com/video/av19849697?share_medium=android&a ...

  8. Ubuntu14.04安装PyMuPDF

    最近写的一个东西需要将pdf转成图片然后放在网页上展示,找到了个非常好用的轮子叫做PyMuPDF,在windows上测试的时候跑的666,在ubuntu上安装依赖的时候,简直万脸懵逼.github上给 ...

  9. 第八次Scrum meeting

    第八次Scrum  meeting 任务及完成度: 成员 12.29 12.30 陈谋 任务1040:完成stackoverflow的数据处理后的json处理(99%) 任务1114-1:完成对网页数 ...

  10. tftp服务、串口工具minicom

    linux下安装tftp服务 参考这位仁兄的经验 确实百度上很多关于配置tftp服务的方法,但是这篇文章的介绍真的是很精简,对于一个刚接触纯linux环境的小白来说是很舒服的一件事. 首先是安装tft ...