opencv将图像转化为灰度图,然后边缘检测

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;
}
int main(int argc, char* argv[])
{
    IplImage* img=cvLoadImage("C:\\horse.jpg");
    cvNamedWindow("Example-in");
    cvShowImage("Example-in",img);
    IplImage* outgray=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
    cvCvtColor( img, 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);
    cvDestroyWindow("Example-in");
    cvDestroyWindow("Example-outgray");
    cvDestroyWindow("Example-out");
    return 0;
}

2:运行结果如下:

时间: 2024-10-08 08:21:22

opencv将图像转化为灰度图,然后边缘检测的相关文章

彩色图转化成灰度图

对于图像由彩色图转化为灰度图有三种方法分别为 加权法 均值法 最大值法! 加权法就是  GRAY==0.3*R+0.59*G+0.11*B 均值法就是 GRAY==(R+G+B)/3 最大值发就是  max(R,G,B) A=imread('D:\lena.BMP');r=double(A(:,:,1));g=double(A(:,:,2));b=double(A(:,:,3));[m,n]=size(r);bw=zeros(m,n);bw=0.3.*r+0.59.*g+0.11.*b;subp

MATLAB 矩阵转化为灰度图

A=[ 1.00 0.96 0.98 0.88 0.94 0.61 0.96 0.80 0.98 0.89 0.96 1.00 0.94 0.90 0.95 0.71 0.96 0.83 0.90 0.88 0.98 0.94 1.00 0.84 0.91 0.54 0.93 0.73 0.97 0.90 0.88 0.90 0.84 1.00 0.89 0.85 0.94 0.94 0.80 0.82 0.94 0.95 0.91 0.89 1.00 0.72 0.94 0.84 0.90 0

S0.2 灰度图

目录 灰度图定义 灰度图优点 RGB转灰度算法(OpenCV3) 量化 算法公式 OpenCV自带函数实现 综合比较 灰度图定义 对于单色(灰度)图像而言,每个像素的亮度用一个数值来表示,通常数值范围在0到255之间,0表示黑.255表示白,其它值表示处于黑白之间的灰度. 灰度图优点 我们在进行很多图像的操作时,如果是彩色的 256 色图,由于图象处理后有可能会产生不属于这 256 种颜色的新颜色. RGB转灰度算法(OpenCV3) 量化 我们知道,自然界中的所有颜色都可以由红.绿.蓝(R,G

opencv的图像去雾

上个月用基于中值滤波的暗通道图像去雾算法在matlab中实现了,现在想把它改造成C++的代码,结果效果明显不对,特此发出来,希望能找到问题. 1 #include <opencv2/core/core.hpp> 2 #include <opencv2/highgui/highgui.hpp> 3 #include <opencv2/highgui/highgui_c.h> 4 #include <opencv2/imgproc/types_c.h> 5 #i

opencv学习之路(17)、边缘检测

一.概述 二.canny边缘检测 1 #include "opencv2/opencv.hpp" 2 using namespace cv; 3 4 void main() 5 { 6 //Canny边缘检测 7 Mat srcImg = imread("E://1.png",0); //0表示以灰度图读入,彩色图和灰度图进行边缘检测时略有不同,建议使用灰度图 8 //medianBlur(srcImg, srcImg,5);//中值滤波 9 imshow(&quo

怎么样用opencv将彩色图片转化成像素值只有0和255的灰度图?

  分类: OpenCV [Q1]怎么样用opencv将彩色图片转化成像素值只有0和255的灰度图? 进行灰度化,IplImage* pImg = cvLoadImage( "C:\\1.bmp", 0 ); 这样图像已经灰度化,然后调用cvThreshold(image, image, 125, 255, CV_THRESH_BINARY); 就可以了,125那里是你所用的阈值,这就是最简单的二值化,你要用ostu,或者别的高级一点的,就要自己写函数了   // Truncate v

RGB图像转为灰度图

最后结论: Grey = (R*38 + G*75 + B*15)>> 7 代码 #include <cv.h> #include <highgui.h> using namespace cv; int main(){ Mat src= imread("C:\\Users\\Poplar\\Pictures\\ff.jpg"); Matgrey(src.rows, src.cols, CV_8UC1, Scalar(0)); for (inty =

从视频文件中读入数据--&gt;将数据转换为灰度图--&gt;对图像做candy边缘检测

//从视频文件中读入数据-->将数据转换为灰度图-->对图像做candy边缘检测 //作者:sandy //时间:2015-10-10 #include <cv.h> #include <highgui.h> int main(int argc, char *argv[]){ //预备工作 CvCapture* capture=cvCreateFileCapture("E:\\Videos\\xx.avi");//让capture变量指向视频文件 i

cocos2dx shader实现灰度图android后台切换回来导致图像偏移的问题

转自:http://www.tuicool.com/articles/U3URRrI 项目中经常会遇到将一张图像处理成灰色的需求,为了节省资源,一般不会让美术再做一套同样的灰度图,通常会通过代码处理让图片变灰.网上也有很多用shader处理图片变灰的方法,这些方法确实也实现了让图片变灰的需求,但是android平台从后台切换回来的时候,shader被释放,导致图片位置错乱.关键在于从android后台切换回来的时候需要重新加载shader.我们看一下cocos2dx原生的shader处理方式,我