// 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. BAT大厂面试流程剖析

    在当今互联网中,虽然互联网行业从业者众多,不断崛起的互联网公司也会很多,但如BAT等大厂,仍然是很多同学想要进入的企业.那么本篇文章将会为大家很直白的讲解大厂的面试流程以及侧重点. 首先闲聊一下,为什 ...

  2. Java实验报告一:Java开发环境的熟悉

    实验要求: 1. 使用JDK编译.运行简单的Java程序 2.使用Eclipse 编辑.编译.运行.调试Java程序 实验内容 (一)   命令行下Java程序开发 (二)Eclipse下Java程序 ...

  3. 基于SSH的高校网上选课系统的质量属性的实现

    我对于基于SSH的高校网上选课系统的质量属性的实现是从可用性.性能.安全性.可维护性.易用性五个方面进行的实现. 可用性方面: 实现方式:(1)当系统试图超出限制范围来进行课程查询或选课时必须进行错误 ...

  4. SDN网络虚拟化、资源映射等相关论文粗读

    1. Control Plane Latency with SDN Network Hypervisors: The Cost of Virtualization 年份:2016 来源:IEEE NE ...

  5. 安装wamp提示You dont't have permission to accesson on this server的解决方案

    展示一下安装好的效果图 首先找到安装目录下的路径[wamp\bin\apache\Apache2.2.21\conf\] § 找到httpd.conf,用记事本打开httpd.conf,然后将 1. ...

  6. 深入理解nodejs的next函数。koa的使用 app.params的使用

    next就是一个递归函数 const Koa = require('koa'); const app = new Koa(); app.use(ctx => { ctx.body = 'Hell ...

  7. C#.字符串转数组,数组转字符串

    string str = "1,2,3,4,5,6,7"; string[] strArray = str.Split(','); //字符串转数组 str = string.Em ...

  8. codeforces548B

    Mike and Fun CodeForces - 548B Mike and some bears are playing a game just for fun. Mike is the judg ...

  9. PKUWC 2019&WC 2019爆零记

    PKUWC 2019&WC 2019爆零记 毕竟过了很久了,杂七杂八的东西就不写了,并且除成绩之外的内容不保证其正确性. Day1 T1:看到这道题很舒服啊,枚举top序算合法图的数量,状压D ...

  10. BZOJ1785[USACO 2010 Jan Gold 3.Cow Telephones]——贪心

    题目描述 奶牛们建立了电话网络,这个网络可看作为是一棵无根树连接n(1 n 100,000)个节点,节点编号为1 .. n.每个节点可能是(电话交换机,或者电话机).每条电话线连接两个节点.第i条电话 ...