OpenCV学习笔记——形态学梯度操作

代码:

#include<cv.h>
#include<highgui.h>
int main(void)
{
	cvNamedWindow("cmp");
	IplImage *temp = cvLoadImage("sample.jpg");//载入
	IplImage *src = cvCreateImage(CvSize(temp->width*0.5,temp->height*0.5), temp->depth,temp->nChannels);//缩放
	cvResize(temp, src);
	IplImage *srctemp = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);
	IplImage *total = cvCreateImage(CvSize(src->width *5, src->height ), src->depth, src->nChannels);

	IplImage *open = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);
	IplImage *close = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);
	IplImage *gradient = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);
	IplImage *tophat = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);
	IplImage *blackhat = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);

	cvZero(srctemp);
	cvZero(total);

	cvZero(open);
	cvZero(close);
	cvZero(gradient);
	cvZero(tophat);
	cvZero(blackhat);

	IplConvKernel *kernel = cvCreateStructuringElementEx(3,3,2,2,CV_SHAPE_ELLIPSE);

	cvMorphologyEx(src, open, srctemp, kernel, CV_MOP_OPEN);
	cvMorphologyEx(src, close, srctemp, kernel, CV_MOP_CLOSE);
	cvMorphologyEx(src, gradient, srctemp, kernel, CV_MOP_GRADIENT);
	cvZero(srctemp);
	cvMorphologyEx(src, tophat, srctemp, kernel, CV_MOP_TOPHAT);
	cvMorphologyEx(src, open, srctemp, kernel, CV_MOP_BLACKHAT);
	CvFont font;
	cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 1, 1, 2, 2, CV_AA);
	cvPutText(open, "open", CvPoint(20, 40), &font, CV_RGB(169, 55, 55));
	cvPutText(close, "close", CvPoint(20, 40), &font, CV_RGB(169, 55, 55));
	cvPutText(gradient, "gradient", CvPoint(20, 40), &font, CV_RGB(169, 55, 55));
	cvPutText(tophat, "tophat", CvPoint(20, 40), &font, CV_RGB(169, 55, 55));
	cvPutText(blackhat, "blackhat", CvPoint(20, 40), &font, CV_RGB(169, 55, 55));
	int width = src->width;
	int height = src->height;

	cvSetImageROI(total, CvRect(0, 0, width, height));
	cvCopy(open, total);
	cvResetImageROI(total);

	cvSetImageROI(total, CvRect(width, 0, width, height));
	cvCopy(close, total);
	cvResetImageROI(total);

	cvSetImageROI(total, CvRect(width*2, 0, width, height));
	cvCopy(gradient, total);
	cvResetImageROI(total);

	cvSetImageROI(total, CvRect(width * 3, 0, width, height));
	cvCopy(tophat, total);
	cvResetImageROI(total);

	cvSetImageROI(total, CvRect(width * 4, 0, width, height));
	cvCopy(blackhat, total);
	cvResetImageROI(total);

	cvShowImage("cmp", total);
	cvWaitKey(0);
	cvSaveImage("out.png", total);
	cvDestroyAllWindows();
	cvReleaseImage(&temp);
	cvReleaseImage(&src);
	cvReleaseImage(&srctemp);
	cvReleaseImage(&total);
	cvReleaseImage(&open);
	cvReleaseImage(&close);
	cvReleaseImage(&gradient);
	cvReleaseImage(&tophat);
	cvReleaseImage(&blackhat);

	return 0;
}

  

效果:

转载于:https://www.cnblogs.com/Blackops/p/5866891.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值