OpenCV-将图像两次缩放+转化为灰度图+边缘检测
来源:互联网 发布:铁血战士玩具淘宝 编辑:程序博客网 时间:2024/05/16 06:18
1:代码如下:
#include "stdafx.h"#include "highgui.h"#include "cv.h"#include "iostream"using namespace std;IplImage* doCanny(IplImage* in,double lowThresh,double highThresh,double aperture){ if(in->nChannels !=1) //只对应于单通道,即灰度图 { cout<<"不是灰度图"<<endl; return 0; } //创建首地址并分配存储空间IplImage* cvCreateImage( CvSize size, int depth, int channels ); //size 图像宽、高 //depth 图像元素的位深度,IPL_DEPTH_8U - 无符号8位整型 //channels 每个元素(像素)通道数.可以是 1, 2, 3 或 4 IplImage* out=cvCreateImage(cvGetSize(in),IPL_DEPTH_8U,1); //图像的边缘检测(采用canny算法) //函数 cvCanny 采用 Canny 算法发现输入图像的边缘而且在输出图像中标识这些边缘。 //threshold1和threshold2 当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割。 //void cvCanny( const CvArr* image,CvArr* edges,double threshold1,double threshold2, int aperture_size=3 ) //image 输入单通道图像(可以是彩色图像)对于多通道的图像可以用cvCvtColor()修改 //edges 输出的边缘图像 ,也是单通道的,但是是黑白的 //threshold1 第一个阈值 //threshold2 第二个阈值 //aperture_size Sobel 算子内核大小 cvCanny(in,out,lowThresh,highThresh,aperture); return out;}IplImage* doPyrDown(IplImage* in,int filter=IPL_GAUSSIAN_5x5){ assert(in->width%2==0 && in->height%2==0); //创建首地址并分配存储空间IplImage* cvCreateImage( CvSize size, int depth, int channels ); //size 图像宽、高 //depth 图像元素的位深度,IPL_DEPTH_8U - 无符号8位整型 //channels 每个元素(像素)通道数.可以是 1, 2, 3 或 4 //得到二维的数组的尺寸,以CvSize返回. //CvSize,OpenCV的基本数据类型之一。表示矩阵框大小,以像素为精度。与CvPoint结构类似 IplImage* out=cvCreateImage(cvSize(in->width/2,in->height/2),in->depth,in->nChannels); //cvPyrDown使用Gaussian金字塔分解对输入图像向下采样 //void cvPyrDown(const CvArr*src,CvArr*dst,int filter=CV_GAUSSIAN_5x5) //src 输入图像,dst 输出图像,其宽度和高度应是输入图像的一半,filter 卷积滤波器类型,目前仅支持CV_GAUSSIAN_5x5. cvPyrDown(in,out); return out;}int main(int argc, char* argv[]){ IplImage* img=cvLoadImage("C:\\girl.jpg"); cvNamedWindow("Example-in"); cvShowImage("Example-in",img); /*-----缩放第一次------*/ IplImage* img1=doPyrDown(img,IPL_GAUSSIAN_5x5); cvNamedWindow("Example-img1"); cvShowImage("Example-img1",img1); /*-----缩放第二次------*/ IplImage* img2=doPyrDown(img1,IPL_GAUSSIAN_5x5); cvNamedWindow("Example-img2"); cvShowImage("Example-img2",img2); /*-----变为灰度图------*/ IplImage* outgray=cvCreateImage(cvGetSize(img2),IPL_DEPTH_8U,1); cvCvtColor( img2, outgray, CV_BGR2GRAY );//转化为灰度图,cvCvtColor(原图, 处理后的图, 不同类型的颜色空间转换) cvNamedWindow("Example-outgray"); cvShowImage("Example-outgray",outgray); /*-----边缘检测-----*/ cvNamedWindow("Example-out"); cvShowImage("Example-out",doCanny(outgray,80,150,3)); cvWaitKey(0); /*-----释放资源-----*/ cvReleaseImage(&img); cvReleaseImage(&outgray); cvReleaseImage(&img1); cvReleaseImage(&img2); cvDestroyWindow("Example-in"); cvDestroyWindow("Example-outgray"); cvDestroyWindow("Example-out"); cvDestroyWindow("Example-img1"); cvDestroyWindow("Example-img2"); return 0;}运行结果:
阅读全文
0 0
- OpenCV-将图像两次缩放+转化为灰度图+边缘检测
- OpenCV-将图像转化为灰度图,然后边缘检测
- OpenCV将彩色图像转化为灰度图代码
- opencv将灰度图转化为RGB三通道图像
- 六.使用OpenCv将图像转化为灰度图像
- 使用OpenCv将图像转化为灰度图像
- 灰度图,缩放处理,Canny边缘检测
- 利用OpenCV和C++实现由RGB图像转化为灰度图,再将灰度图转化为二值图的程序
- 将视频图像转化为灰度视频
- 利用OpenCV的imread将RGB图像转化为灰度图像!
- 【学习opencv】对图像缩放并进行边缘检测
- opencv图像边缘检测
- 使用CImage类将RGB图像转化为灰度图像
- MATLAB将彩色图像转化为灰度图像
- 灰度图像--图像分割 Canny边缘检测
- python使用opencv将灰度图人脸图片转化为RGB
- 将彩色图片转化为灰度图
- 灰度图像的sobel边缘检测算法
- 如何在linux程序中捕获异常信号
- 从startActivity一步步到穿越进程壁垒
- Python3 注释
- 欢迎使用CSDN-markdown编辑器
- Git首次push报错
- OpenCV-将图像两次缩放+转化为灰度图+边缘检测
- navicat for mysql 如何将表ID排序重1开始?
- Python woe 0.0.7 源码解析
- 函数柯里化的几个例子
- js函数内嵌函数的整体跳出
- 排序算法—归并排序
- 万圣节H5的经典案例,速收藏!
- Java 实现手机号的归属地查询 手机号码的卡的类型
- opencv学习笔记二