// 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. haproxy反向代理环境部署(http和https代理)

    操作背景:前方有一台haproxy代理机器(115.100.120.57/192.168.1.7),后方两台realserver机器(192.168.1.150.192.168.1.151,没有公网i ...

  2. linux-shell-引用-命令替换-命令退出状态-逻辑操作符

    命令替换:bash7步扩展的之一 嵌套  这里没什么意义 退出状态可以参与逻辑判断 表达式 算数表达式和条件表达式,逻辑表达式 查看passwd命令比,避免用户捕获输入密码的接口 这种方式就可以直接输 ...

  3. 《Linux内核分析》实践4

    <Linux内核分析> 实践四--ELF文件格式分析 20135211李行之 一.概述 1.ELF全称Executable and Linkable Format,可执行连接格式,ELF格 ...

  4. Linux内核设计与实现 第三章

    1. 进程和线程 进程和线程是程序运行时状态,是动态变化的,进程和线程的管理操作都是由内核来实现的. Linux中的进程于Windows相比是很轻量级的,而且不严格区分进程和线程,线程不过是一种特殊的 ...

  5. jisuanqi

    1.jisuanqi 2.https://github.com/12wangmin/text/tree/master 3.计算截图 7+8 清除 4.总结 通过课程设计,主要要达到两个目的,一是检验和 ...

  6. 必应语音API(Bing text to speech API)

    前言 Link : Microsoft Speech API overview 通过这个链接,大致了解Bing speech API的语音识别和语音合成两部分, 这次是需要用到TTS,所以就直接看TT ...

  7. JSP中properties文件的路径问题

    做练习的时候,写了个properties文件,放在src/servlet/目录下,访问文件问题花了点时间折腾,最终得到解决,记下. 环境:eclipse jee oxygen,tomcat 9.0. ...

  8. PAT 1076 Wifi密码

    https://pintia.cn/problem-sets/994805260223102976/problems/994805262622244864 下面是微博上流传的一张照片:“各位亲爱的同学 ...

  9. Centos7搭建LAMP+Typecho博客

    一.安装Apache的httpd服务 yum install httpd # 安装httpd服务 systemctl start httpd # 启动httpd服务 systemctl status ...

  10. [转帖]总结ORACLE系统视图及表大全

    总结ORACLE系统视图及表大全:dba_开头.....dba_users 数据库用户信息dba_segments 表段信息dba_extents 数据区信息dba_objects 数据库对象信息db ...