图像处理经典算法及OpenCV程序(4)

2019-08-31 23:22

int main( int argc, char** argv ) {

char* filename = argc == 2 ? argv[1] : (char*)\

if( (image = cvLoadImage( filename, 1)) == 0 ) return -1;

// Create the output image

cedge = cvCreateImage(cvSize(image->width,image->height), IPL_DEPTH_8U, 3);

// 将彩色图像转换为灰度图像

gray = cvCreateImage(cvSize(image->width,image->height), IPL_DEPTH_8U, 1);

edge = cvCreateImage(cvSize(image->width,image->height), IPL_DEPTH_8U, 1);

cvCvtColor(image, gray, CV_BGR2GRAY); // Create a window

cvNamedWindow(wndname, 1);

// create a toolbar

cvCreateTrackbar(tbarname, wndname, &edge_thresh, 100, on_trackbar);

// Show the image on_trackbar(1);

// Wait for a key stroke; the same function arranges events processing cvWaitKey(0);

cvReleaseImage(&image); cvReleaseImage(&gray); cvReleaseImage(&edge); cvDestroyWindow(wndname); return 0; }

/*******代码中的函数说明 1、cvSmooth,其函数声明为:

cvSmooth( const void* srcarr, void* dstarr, int smoothtype,int param1, int param2, double param3 )

cvSmooth函数的作用是对图象做各种方法的图象平滑。其中,srcarr为输入图象;dstarr为输出图象;

param1为平滑操作的第一个参数;param2为平滑操作的第二个参数(如果param2值为0,则表示它被设为param1); param3是对应高斯参数的标准差。

参数smoothtype是图象平滑的方法选择,主要的平滑方法有以下五种: CV_BLUR_NO_SCALE:简单不带尺度变换的模糊,即对每个象素在 param1×param2领域求和。

CV_BLUR:对每个象素在param1×param2邻域求和并做尺度变换 1/(param1?param2)。

CV_GAUSSIAN:对图像进行核大小为param1×param2的高斯卷积。

CV_MEDIAN:对图像进行核大小为param1×param1 的中值滤波(邻域必须是方的)。

CV_BILATERAL:双向滤波,应用双向 3x3 滤波,彩色设置为param1,空间设置为param2。

2、void cvNot(const CvArr* src,CvArr* dst);

函数cvNot()会将src中的每一个元素的每一位取反,然后把结果赋给dst。 因此,一个值为0x00的8位图像将被映射到0xff,而值为0x83的图像将被映射到0x7c。

3、void cvCanny( const CvArr* image, CvArr* edges, double threshold1,double threshold2, int aperture_size=3 ); 采用 Canny 算法做边缘检测 image 输入图像 edges

输出的边缘图像 threshold1 第一个阈值 threshold2 第二个阈值 aperture_size

Sobel 算子内核大小

4、void cvCopy( const CvArr* src, CvArr* dst, const CvArr* mask=NULL ); 在使用这个函数之前,你必须用cvCreateImage()一类的函数先开一段内存,然后传递给dst。

cvCopy会把src中的数据复制到dst的内存中。

5、cvCreateTrackbar

创建trackbar并将它添加到指定的窗口。

int cvCreateTrackbar( const char* trackbar_name, const char* window_name, int* value, int count, CvTrackbarCallback on_change ); trackbar_name

被创建的trackbar名字。 window_name

窗口名字,这个窗口将为被创建trackbar的父对象。 value

整数指针,它的值将反映滑块的位置。这个变量指定创建时的滑块位置。 count

滑块位置的最大值。最小值一直是0。 on_change

每次滑块位置被改变的时候,被调用函数的指针。这个函数应该被声明为void Foo(int);

如果没有回调函数,这个值可以设为NULL。

函数cvCreateTrackbar用指定的名字和范围来创建trackbar(滑块或者范围控制),指定与trackbar位置同步的变量,

并且指定当trackbar位置被改变的时候调用的回调函数。被创建的trackbar显示在指定窗口的顶端。 */

角点检测

原始图:

处理后图:

源代码:

#include #include \

#include \#define max_corners 100

int main( int argc, char** argv ) {

int cornerCount=max_corners;

CvPoint2D32f corners[max_corners];

IplImage *srcImage = 0, *grayImage = 0, *corners1 = 0, *corners2 = 0;

int i;

CvScalar color = CV_RGB(255,0,0);

char* filename = argc == 2 ? argv[1] : (char*)\注意相对路径

cvNamedWindow( \1 ); // create HighGUI window with name \

//Load the image to be processed

srcImage = cvLoadImage(filename, 1);

grayImage = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 1);

//copy the source image to copy image after converting the format

cvCvtColor(srcImage, grayImage, CV_BGR2GRAY);

//create empty images of same size as the copied images

corners1= cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_32F, 1); corners2= cvCreateImage(cvGetSize(srcImage),IPL_DEPTH_32F, 1);

cvGoodFeaturesToTrack (grayImage, corners1, corners2, corners, &cornerCount, 0.05, 5, 0,

3, // block size

0, // not use harris 0.4 );

printf(\

// draw circles at each corner location in the gray image and //print out a list the corners if(cornerCount>0) {

for (i=0; i

cvCircle(srcImage, cvPoint((int)(corners[i].x), (int)(corners[i].y)), 6,

color, 2, CV_AA, 0); } }

cvShowImage( \

cvReleaseImage(&srcImage); cvReleaseImage(&grayImage); cvReleaseImage(&corners1); cvReleaseImage(&corners2);

cvWaitKey(0); // wait for key. The function has return 0; }

友情链接一下,这是别人写的:

http://hi.http://www.wodefanwen.com//xiaoduo170/blog/item/2816460175c8330779ec2c64.html


图像处理经典算法及OpenCV程序(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:论责令限期拆除的法律性质

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: