opencv基础实例(C++)
2016-11-15 23:26
190 查看
最近正在学习opencv,主要涉及其中对图像的操作,现简单的给出部分基础实例,读者在使用时,只需打开某个实例的注释即可运行代码。有关各个函数的参数的具体意义并没有具体的说明,请读者自行阅读手册,这是学习opencv必须经历的过程。如下实例仅仅给读者一个编程参考,后续将持续更新。
/**
*@main.cpp
*@learning note
*@Ali
*/
#include "opencv2/core/core.hpp"
#include "opencv2/videoio/videoio.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;
int main()
{
///边缘提取sobel算子
IplImage *src = cvLoadImage("C:\\1.jpg", 1);
IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
//cvSobel(src, dst, 0, 1, 7);//一般核
cvSobel(src, dst, 0, 1, CV_SCHARR);//优化过的核
cvShowImage("dst", dst);
///Laplace变换
/*
IplImage *src = cvLoadImage("C:\\1.jpg", 1);
IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
cvLaplace(src, dst, 9);
cvShowImage("Laplace", dst);
*/
///blurring处理
/*
IplImage *src = cvLoadImage("C:\\1.jpg", 1);
IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
cvSmooth(src, dst, CV_BLUR_NO_SCALE, 3, 0, 0.0, 0.0);
cvShowImage("Smooth", dst);
*/
///Erode腐蚀
/*
IplImage *src = cvLoadImage("C:\\1.jpg", 1);
IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
cvErode(src, dst, 0,1);
*/
///Dilate膨胀
/*
IplImage *src = cvLoadImage("C:\\1.jpg", 1);
IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
cvDilate(src, dst, 0, 1);
cvShowImage("Dilate", dst);
*/
///漫水填充法
/*
IplImage *src = cvLoadImage("C:\\1.jpg", 1);
IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
cvFloodFill(src, CvPoint(10, 200), cvScalar(120,25,55), cvScalar(30,30,30), cvScalar(30,30,30), NULL, 8, NULL);
cvShowImage("src", src);
*/
///尺寸调整
/*
IplImage *src = cvLoadImage("C:\\1.jpg", 1);
IplImage *dst = cvCreateImage(CvSize((src->width)*0.5, (src->height)*0.5), src->depth, src->nChannels);
cvResize(src, dst, CV_INTER_LINEAR);
cvShowImage("Resize", dst);
*/
///图像金字塔
/*
IplImage *src = cvLoadImage("C:\\1.jpg", 1);
IplImage *dst = cvCreateImage(CvSize(src->width / 2, src->height / 2), src->depth, src->nChannels);
cvPyrDown(src, dst);
cvShowImage("Pyrdown",dst);
//IplImage *dst = cvCreateImage(CvSize(src->width * 2, src->height * 2), src->depth, src->nChannels);
//cvPyrUp(src, dst);
//cvShowImage("Pyrup", dst);
*/
///金字塔分割
/*导入cvpyrsegmention出现问题,应该include一些东西,缺失*/
///阈值
/*
IplImage *src = cvLoadImage("C:\\1.jpg", 1);
IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
IplImage *r = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
IplImage *g = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
IplImage *b = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
IplImage *temp = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
IplImage *dst2 = cvCreateImage(cvGetSize(src), src->depth,1);
cvSplit(src, r, g, b, NULL);
cvAddWeighted(r, 1.0 / 3.0, g, 1.0 / 3.0, 0.0, temp);
cvAddWeighted(temp, 2.0 / 3.0, b, 1.0 / 3.0, 0.0, temp);
cvThreshold(temp,dst2, 100, 100, CV_THRESH_TRUNC);
cvShowImage("Threshold", dst2);
*/
///自适应阈值(只能单通道)
/*
IplImage *src = cvLoadImage("C:\\1.jpg", 0);
IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
cvAdaptiveThreshold(src, dst, 200.0, 0, 0, 3, 5.0);
cvShowImage("AdaptThreshold", dst);
*/
///卷积
/*
IplImage *src = cvLoadImage("C:\\1.jpg", 1);
IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
int data[] = { 5, 0, 0, 0, 5, 0, 0, 0, 5 };
CvMat kernel = cvMat(3, 3, CV_MAT_MAGIC_VAL, data);
cvFilter2D(src, dst, &kernel, cvPoint(-1, -1));
cvShowImage("Convolution", dst);
*/
///处理卷积边界
/*
int kernel = 11;
IplImage *src = cvLoadImage("C:\\1.jpg", 1);
IplImage *dst = cvCreateImage(CvSize(src->width+10, src->height+10), src->depth, src->nChannels);//构造大图像
cvCopyMakeBorder(src, dst, cvPoint((kernel - 1) / 2, (kernel - 1) / 2), IPL_BORDER_CONSTANT, cvScalarAll(0));
cvShowImage("Border", dst);
*/
waitKey(0);
cvReleaseImage(&src);
cvReleaseImage(&dst);
cvDestroyAllWindows();
}
/**
*@main.cpp
*@learning note
*@Ali
*/
#include "opencv2/core/core.hpp"
#include "opencv2/videoio/videoio.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;
int main()
{
///边缘提取sobel算子
IplImage *src = cvLoadImage("C:\\1.jpg", 1);
IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
//cvSobel(src, dst, 0, 1, 7);//一般核
cvSobel(src, dst, 0, 1, CV_SCHARR);//优化过的核
cvShowImage("dst", dst);
///Laplace变换
/*
IplImage *src = cvLoadImage("C:\\1.jpg", 1);
IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
cvLaplace(src, dst, 9);
cvShowImage("Laplace", dst);
*/
///blurring处理
/*
IplImage *src = cvLoadImage("C:\\1.jpg", 1);
IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
cvSmooth(src, dst, CV_BLUR_NO_SCALE, 3, 0, 0.0, 0.0);
cvShowImage("Smooth", dst);
*/
///Erode腐蚀
/*
IplImage *src = cvLoadImage("C:\\1.jpg", 1);
IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
cvErode(src, dst, 0,1);
*/
///Dilate膨胀
/*
IplImage *src = cvLoadImage("C:\\1.jpg", 1);
IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
cvDilate(src, dst, 0, 1);
cvShowImage("Dilate", dst);
*/
///漫水填充法
/*
IplImage *src = cvLoadImage("C:\\1.jpg", 1);
IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
cvFloodFill(src, CvPoint(10, 200), cvScalar(120,25,55), cvScalar(30,30,30), cvScalar(30,30,30), NULL, 8, NULL);
cvShowImage("src", src);
*/
///尺寸调整
/*
IplImage *src = cvLoadImage("C:\\1.jpg", 1);
IplImage *dst = cvCreateImage(CvSize((src->width)*0.5, (src->height)*0.5), src->depth, src->nChannels);
cvResize(src, dst, CV_INTER_LINEAR);
cvShowImage("Resize", dst);
*/
///图像金字塔
/*
IplImage *src = cvLoadImage("C:\\1.jpg", 1);
IplImage *dst = cvCreateImage(CvSize(src->width / 2, src->height / 2), src->depth, src->nChannels);
cvPyrDown(src, dst);
cvShowImage("Pyrdown",dst);
//IplImage *dst = cvCreateImage(CvSize(src->width * 2, src->height * 2), src->depth, src->nChannels);
//cvPyrUp(src, dst);
//cvShowImage("Pyrup", dst);
*/
///金字塔分割
/*导入cvpyrsegmention出现问题,应该include一些东西,缺失*/
///阈值
/*
IplImage *src = cvLoadImage("C:\\1.jpg", 1);
IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
IplImage *r = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
IplImage *g = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
IplImage *b = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
IplImage *temp = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
IplImage *dst2 = cvCreateImage(cvGetSize(src), src->depth,1);
cvSplit(src, r, g, b, NULL);
cvAddWeighted(r, 1.0 / 3.0, g, 1.0 / 3.0, 0.0, temp);
cvAddWeighted(temp, 2.0 / 3.0, b, 1.0 / 3.0, 0.0, temp);
cvThreshold(temp,dst2, 100, 100, CV_THRESH_TRUNC);
cvShowImage("Threshold", dst2);
*/
///自适应阈值(只能单通道)
/*
IplImage *src = cvLoadImage("C:\\1.jpg", 0);
IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
cvAdaptiveThreshold(src, dst, 200.0, 0, 0, 3, 5.0);
cvShowImage("AdaptThreshold", dst);
*/
///卷积
/*
IplImage *src = cvLoadImage("C:\\1.jpg", 1);
IplImage *dst = cvCreateImage(CvSize(src->width, src->height), src->depth, src->nChannels);
int data[] = { 5, 0, 0, 0, 5, 0, 0, 0, 5 };
CvMat kernel = cvMat(3, 3, CV_MAT_MAGIC_VAL, data);
cvFilter2D(src, dst, &kernel, cvPoint(-1, -1));
cvShowImage("Convolution", dst);
*/
///处理卷积边界
/*
int kernel = 11;
IplImage *src = cvLoadImage("C:\\1.jpg", 1);
IplImage *dst = cvCreateImage(CvSize(src->width+10, src->height+10), src->depth, src->nChannels);//构造大图像
cvCopyMakeBorder(src, dst, cvPoint((kernel - 1) / 2, (kernel - 1) / 2), IPL_BORDER_CONSTANT, cvScalarAll(0));
cvShowImage("Border", dst);
*/
waitKey(0);
cvReleaseImage(&src);
cvReleaseImage(&dst);
cvDestroyAllWindows();
}
相关文章推荐
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- Linux下: Eclipse安装配置OpenCV2.1,用C++调用OpenCV过程 及 测试实例
- LinuxC/C++编程基础(32) 使用thrift/rpc开发简单实例(续4)
- C++基础—消息处理实例
- C++大学基础教程_11_10_实例研究:String类
- C语言学习100例实例程序--我练习的C++版(每天一题夯实基础)
- 【VS开发】C++ opencv Mat基础
- Linux下Eclipse安装配置OpenCV2.4.8,用C++调用OpenCV及测试实例
- LinuxC/C++编程基础(31) 使用thrift/rpc开发简单实例(续3)
- C++基础——用C++实例理解UML类图
- [C++基础]027_数组和指针是不等价的一个实例
- LinuxC/C++编程基础(13) shell脚本简单实例
- LinuxC/C++编程基础(8) 基于条件变量实现生产者与消费者的实例
- LinuxC/C++编程基础(35) std::istream使用实例
- LinuxC/C++编程基础(23) 使用thrift/rpc开发简单实例(续1)
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- LinuxC/C++编程基础(7) boost::mutex的简单实例
- LinuxC/C++编程基础(21) 使用boost::asio搭建服务器简单实例(续)
- C++大学基础教程_11_8_实例研究:Array类
- 要看懂OpenCV的代码,所需要的C和C++的基础知识