opencv各种小程序代码
各种小程序代码
void COpenCV::OnOpencvCvcanny()
{// TODO: 在此添加命令处理程序代码IplImage* imgColor = cvLoadImage("C:\\Users\\Administrator\\Desktop\\159.jpg", 0);IplImage* contoursImage = cvCreateImage(cvSize(imgColor->width, imgColor->height), 8, 1);IplImage* img = cvCreateImage(cvSize(imgColor->width, imgColor->height), 8, 1);IplImage* imgmid = cvCloneImage(imgColor);CvSeq* contours = 0;//提取图像img的轮廓信息cvCanny(imgmid, img, 80, 180, 3);//cvSaveImage("midimg/Canny.jpg", img);cvNamedWindow("image", 1);cvShowImage("image", imgColor);cvNamedWindow("contours", 1);cvShowImage("contours", img);cvWaitKey(0);cvSaveImage("C:\\Users\\Administrator\\Desktop\\cvCanny.jpg", img);//cvReleaseMemStorage(&storage);cvReleaseImage(&img);cvReleaseImage(&contoursImage);cvReleaseImage(&imgColor);}void COpenCV::OnOpencvHist()
{// TODO: 在此添加命令处理程序代码IplImage* src=cvLoadImage("D:\\18.jpg", 1);//Compute the HSV image and decompose it into separate planes.IplImage* hsv = cvCreateImage(cvGetSize(src), 8, 3);//rgb色彩空间转换到hsv色彩空间cvCvtColor(src, hsv, CV_BGR2HSV);cvNamedWindow("hsv", 1);cvShowImage("hsv", hsv);IplImage* h_plane = cvCreateImage(cvGetSize(src), 8, 1);IplImage* s_plane = cvCreateImage(cvGetSize(src), 8, 1);IplImage* v_plane = cvCreateImage(cvGetSize(src), 8, 1);IplImage* planes[] = { h_plane, s_plane };//分割为单通道图像cvCvtPixToPlane(hsv, h_plane, s_plane, v_plane, 0);cvNamedWindow("h_plane", 1); cvShowImage("h_plane", h_plane); cvNamedWindow("s_plane", 1); cvShowImage("s_plane", s_plane); cvNamedWindow("v_plane", 1); cvShowImage("v_plane", v_plane);//Build the histogram and copute its contents./** H 分量划分为30个等级,S分量划分为32个等级 */int h_bins = 30;int s_bins = 32;CvHistogram* hist;{int hist_size[] = { h_bins, s_bins };float h_ranges[] = { 0, 180 }; /* hue varies from 0 (~0°red) to 180 (~360°red again) */float s_ranges[] = { 0, 255 }; /* saturation varies from 0 (black-gray-white) to 255 (pure spectrum color) */float * ranges[] = { h_ranges, s_ranges };/* 创建直方图,二维, 每个维度上均分 */hist = cvCreateHist(2, // int dims hist_size, // int* sizes CV_HIST_ARRAY,// int typeranges, // float** ranges 1 //uniform);}// 根据H,S两个平面数据统计直方图 cvCalcHist(planes, hist, 0, 0); //Compute histogram//归一化处理cvNormalizeHist(hist, 1.0); //Normalize it//Creat an image to use to visualize our histogram.int scale = 10;IplImage* hist_img = cvCreateImage(cvSize(h_bins*scale, s_bins*scale),8,3);cvZero(hist_img);//populate our visualization with litter gray squares./** 获取直方图统计的最大值,用于动态显示直方图 */float max_value = 0;cvGetMinMaxHistValue(hist, 0, &max_value, 0, 0);for (int h = 0; h < h_bins; h++){for (int s = 0; s < s_bins; s++){float bin_val = cvQueryHistValue_2D(hist, h, s);int intensity = cvRound(bin_val * 255 / max_value);cvRectangle(hist_img,cvPoint(h*scale, s*scale),cvPoint((h + 1)*scale - 1, (s + 1)*scale - 1),CV_RGB(intensity, intensity, intensity),CV_FILLED);}}cvNamedWindow("Source", 1);cvShowImage("Source", src);cvNamedWindow("H-S Histogram", 1);cvShowImage("H-S Histogram", hist_img);cvWaitKey(0);
}void COpenCV::OnOpencvMatchtemplate()
{// TODO: 在此添加命令处理程序代码IplImage *src, *templ, *ftmp[6]; int i;//Read in the source image to be searched;if ((src = cvLoadImage("D:\\19.jpg", 1)) == 0){printf("Error on reading src image %s\n", "D:\\19.jpg");}//Read in the template to be used for matching:if ((templ = cvLoadImage("D:\\20.jpg", 1)) == 0){printf("Error on reading template image %s\n", "D:\\20.jpg");}//allocate output images:int iwidth = src->width - templ->width + 1; int iheight = src->height - templ->height + 1;for (i = 0; i < 6; i++){ftmp[i] = cvCreateImage(cvSize(iwidth, iheight), 32, 1);}//Do the matching of the template witch the image:for (i = 0; i < 6; i++){double min_val;double max_val;CvPoint min_loc;CvPoint max_loc;cvMatchTemplate(src, templ, ftmp[i], i);cvNormalize(ftmp[i], ftmp[i], 1, 0, CV_MINMAX);cvMinMaxLoc(ftmp[i], &min_val, &max_val, &min_loc, &max_loc, NULL);cvRectangle(src, cvPoint(min_loc.x, min_loc.y), cvPoint((min_loc.x + templ->width), (min_loc.y + templ->height)), CV_RGB(0, 255, 0), 1);}//DisplacvNamedWindow("Template", 0);cvShowImage("Template", templ);cvNamedWindow("image", 0);cvShowImage("image", src);cvNamedWindow("SQDIFF", 0);cvShowImage("SQDIFF", ftmp[0]);cvNamedWindow("SQDIFF_NORMED", 0);cvShowImage("SQDIFF_NORMED", ftmp[1]);cvNamedWindow("CCORR", 0);cvShowImage("CCORR", ftmp[2]);cvNamedWindow("CCORR_NORMED", 0);cvShowImage("CCORR_NORMED", ftmp[3]);cvNamedWindow("CCOEFF", 0);cvShowImage("CCOEFF", ftmp[4]);cvNamedWindow("CCOEFF_NORMED", 0);cvShowImage("CCOEFF_NORMED", ftmp[5]);
}void COpenCV::OnOpencvContours2()
{// TODO: 在此添加命令处理程序代码cvNamedWindow("box", 0);IplImage* img_8uc1 = cvLoadImage("C:\\Users\\Administrator\\Desktop\\159.jpg", CV_LOAD_IMAGE_GRAYSCALE);IplImage* img_edge = cvCreateImage(cvGetSize(img_8uc1), 8, 1);IplImage* img_8uc3 = cvCreateImage(cvGetSize(img_8uc1), 8, 3);cvThreshold(img_8uc1, img_edge, 128, 255, CV_THRESH_BINARY);CvMemStorage* storage = cvCreateMemStorage();CvSeq* first_contours = NULL;int NC = cvFindContours(img_edge,storage,&first_contours,sizeof(CvContour),CV_RETR_LIST);int n = 0;printf("Total Contours Deleted:%d\n", NC);for (CvSeq* c = first_contours; c != NULL; c = c->h_next){cvCvtColor(img_8uc1, img_8uc3, CV_GRAY2BGR);cvDrawContours(img_8uc3,c,cvScalarAll(255),cvScalarAll(255),100);cvShowImage("box", img_8uc3);for (int i = 0; i < c->total; ++i){CvPoint* p = CV_GET_SEQ_ELEM(CvPoint, c, i);}cvWaitKey(0);n++;}cvCvtColor(img_8uc1, img_8uc3, CV_GRAY2BGR);cvShowImage("box", img_8uc3);cvNamedWindow("src", 0);cvShowImage("src", img_8uc1);cvNamedWindow("edge", 0);cvShowImage("edge", img_edge);cvWaitKey(0);cvDestroyAllWindows();cvReleaseImage(&img_8uc1);cvReleaseImage(&img_8uc3);cvReleaseImage(&img_edge);}void COpenCV::OnOpencvAddgaussiannoise()
{// TODO: 在此添加命令处理程序代码Mat image;image = imread("D:\\11.jpg", 1); // Read the file if (!image.data) // Check for invalid input {cout << "Could not open or find the image" << std::endl;}namedWindow("Display window", WINDOW_AUTOSIZE); // Create a window for display. imshow("Display window", image); // Show our image inside it. // Add Gaussian noise here AddGaussian(image);namedWindow("Noisy image", WINDOW_AUTOSIZE); // Create a window for display. imshow("Noisy image", image); // Show our image inside it. waitKey(0); // Wait for a keystroke in the window }void COpenCV::AddGaussian(Mat& I)
{// accept only char type matrices CV_Assert(I.depth() != sizeof(uchar));int channels = I.channels();int nRows = I.rows;int nCols = I.cols * channels;if (I.isContinuous()){nCols *= nRows;nRows = 1;}int i, j;uchar* p;for (i = 0; i < nRows; ++i){p = I.ptr<uchar>(i);for (j = 0; j < nCols; ++j){double val = p[j] + generateGaussianNoise() * 128;if (val < 0)val = 0;if (val > 255)val = 255;p[j] = (uchar)val;}}}void COpenCV::OnOpencvTestnoise()
{// TODO: 在此添加命令处理程序代码}void COpenCV::OnOpencvCvboxpoints()
{// TODO: 在此添加命令处理程序代码//画缺陷的外接矩形IplImage *src = cvLoadImage("D:\\21.jpg", CV_LOAD_IMAGE_GRAYSCALE);CvMemStorage* storage = cvCreateMemStorage(0);CvSeq* contour = 0;cvNamedWindow("image0", 1);cvShowImage("image0", src);int hei = src->height;int wid = src->width;uchar *data = (uchar*)src->imageData;int widstep = src->widthStep;int channel = src->nChannels;IplImage *dst = cvCreateImage(cvSize(wid, hei), IPL_DEPTH_8U, 3);// invert the image for (int i = 0; i<hei; i++){for (int j = 0; j<wid; j++){if (data[i*widstep + j*channel]>120){data[i*widstep + j*channel] = 0;}else{data[i*widstep + j*channel] = 255;}}}cvNamedWindow("image", 0);cvShowImage("image", src);printf("图像的高为:%d,宽为:%d\n\n", hei, wid);cvCvtColor(src, dst, CV_GRAY2BGR);;cvFindContours(src, storage, &contour, sizeof(CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);for (; contour != 0; contour = contour->h_next){CvBox2D rect = cvMinAreaRect2(contour, storage);CvPoint2D32f rect_pts0[4];cvBoxPoints(rect, rect_pts0);int npts = 4, k = 0;int aaa = 0, bbb = 0;CvPoint rect_pts[4], *pt = rect_pts;printf("连通区域最小外接矩形顶点坐标分别为:\n");for (int i = 0; i<4; i++){rect_pts[i] = cvPointFrom32f(rect_pts0[i]);printf("%d %d\n", rect_pts[i].x, rect_pts[i].y);aaa = (int)sqrt((pow((rect_pts[0].x - rect_pts[1].x), 2) + pow((rect_pts[0].y- rect_pts[1].y), 2)));bbb = (int)sqrt((pow((rect_pts[0].x - rect_pts[3].x), 2) + pow((rect_pts[0].y - rect_pts[3].y), 2)));if (aaa<bbb){k = aaa;aaa = bbb;bbb = k;}}printf("最小外接矩形的长为:%d宽为:%d。\n\n", aaa, bbb);cvPolyLine(dst, &pt, &npts, 1, 1, CV_RGB(255, 0, 0), 1);}cvNamedWindow("image5", 1);cvShowImage("image5", dst);cvWaitKey(0);cvDestroyWindow("image");cvDestroyWindow("image5");cvReleaseImage(&src);}void COpenCV::OnOpencv2Mythros()
{//获取单通道的值,并对像素进行处理// TODO: 在此添加命令处理程序代码IplImage* imgSource = cvLoadImage("C:\\Users\\Administrator\\Desktop\\no2.jpg",0);cvNamedWindow("Image", CV_WINDOW_AUTOSIZE);cvShowImage("Image", imgSource);if(imgSource != 0)//imgSource为IplImage*{for (int j = 0; j < imgSource->width; ++j){for (int i = 0; i < imgSource->height; ++i){//获取(i, j)处的单道图像像素值double dPixelVal = cvGetReal2D(imgSource, i, j);if (dPixelVal>51 && dPixelVal <= 102){//设定(i, j)处的单通道图像像素值cvSetReal2D(imgSource, i, j, 51);}}}}cvSaveImage("C:\\Users\\Administrator\\Desktop\\no2.jpg", imgSource);cvWaitKey(0);cvDestroyWindow("Image");cvReleaseImage(&imgSource);
}void COpenCV::OnOpencv2Cvavg()
{// TODO: 在此添加命令处理程序代码IplImage *src1 = cvLoadImage("C:\\Users\\Administrator\\Desktop\\no2.jpg");CvScalar cs,cs1;cvAvgSdv(src1,&cs,&cs1); cout<<"平均值:"<<endl; cout<<cs.val[0] << endl; cout<<cs.val[1] << endl; cout<<cs.val[2] << endl; cout<<cs.val[3] << endl; cout <<endl; cout <<"标准差"<<endl; cout<<cs1.val[0] << endl; cout<<cs1.val[1] << endl; cout<<cs1.val[2] << endl; cout<<cs1.val[3] << endl;
}void COpenCV::OnOpencvImagematching()
{// TODO: 在此添加命令处理程序代码double dbMax = 0; //最大像素值 double dSigmaST, dSigmaS, dSigmaT; //中间结果 double R; //相似性测量 int i, j, m, n;int nMaxWidth, nMaxHeight;CvScalar pixelSrc, pixelTem, pixel0, pixel1;IplImage* TemplateSrc = cvLoadImage("D:\\20.jpg"); //模板图像 IplImage* src = cvLoadImage("D:\\24.jpg"); //原图 //计算dSigmaT dSigmaT = 0;for (n = 0; n < TemplateSrc->height; n++){for (m = 0; m < TemplateSrc->width; m++){pixelTem = cvGet2D(TemplateSrc, n, m);dSigmaT += (double)pixelTem.val[0] * pixelTem.val[0];}}//找到图像中最大相似性出现的位置 for (j = 0; j < src->height - TemplateSrc->height + 1; j++){for (i = 0; i < src->width - TemplateSrc->width + 1; i++){dSigmaST = 0;dSigmaS = 0;for (n = 0; n < TemplateSrc->height; n++){for (m = 0; m < TemplateSrc->width; m++){pixelSrc = cvGet2D(src, j + n, i + m);pixelTem = cvGet2D(TemplateSrc, n, m);dSigmaS += (double)pixelSrc.val[0] * pixelSrc.val[0];dSigmaST += (double)pixelSrc.val[0] * pixelTem.val[0];}}R = dSigmaST / (sqrt(dSigmaS)*sqrt(dSigmaT)); //计算相似性 if (R > dbMax) //与最大相似性比较 {dbMax = R;nMaxHeight = j;nMaxWidth = i;}}}//对目标像素进行赋值 for (j = nMaxHeight; j <TemplateSrc->height + nMaxHeight; j++){for (i = nMaxWidth; i < TemplateSrc->width + nMaxWidth; i++){pixel0 = cvGet2D(src, j, i);pixel1.val[0] = pixel0.val[0] / 2;pixel1.val[1] = pixel0.val[1] / 2;pixel1.val[2] = pixel0.val[2] / 2;cvSet2D(src, j, i, pixel1);}}cvNamedWindow("White", CV_WINDOW_AUTOSIZE);cvShowImage("White", src);while (1){if (cvWaitKey(100) == 27) break;}cvDestroyWindow("White");cvReleaseImage(&src);exit(0);
}
opencv各种小程序代码相关推荐
- python快递分拣小程序_python英语单词测试小程序代码实例
这篇文章主要简介了python英语单词测试小程序代码实例,文中通过示例代码简介的非常具体,对大家的学习或者工作具有一定的参考学习网上卖,需要的朋友可以学习下 爬取了扇贝英语网,并制作了一个英语单词测试 ...
- 简单小程序代码_开个小程序店铺需要多少钱?
大家都开发小程序了,自家也有个小本经营的店铺,为了能够有更多的客源,更大的销量,也想开个小程序,因为规模不算大,手头上资金也不是很充裕,所以开发小程序店铺需要多少钱就成为了第一步的考量,很多商家都不知 ...
- 简单小程序代码_小程序该如何运营
小型程序升级有三种最重要的方法: 1.借助微信附近小程序功能实现客户扩展 大家可能都知道,微信平台具有附近小程序的功能.此功能使用户可以查看周围五公里范围内的所有小程序. 正是由于这个原因,一旦商人完 ...
- c++小程序代码_# 微信小程序的原生框架和taro对比 ##
微信小程序的原生框架和taro对比 小程序历史(为什么会出现?) 2007年 iPhone H5 大家知道现在手机端主要是iOS.Android两大系统,实际上在早期有3大系统竞争,还有一个就是诺基亚 ...
- 微信小程序代码大于2M的一种解决方法
今天,上传小程序代码到另一个微信号,提示代码尺寸过大,卧槽,我上传另一个微信h号都成功了呀!死活找不到原因,就大了270K左右,真是郁闷.偶然把灰级度调小,上传就可以了.估计是文件没压缩就上传,不明白 ...
- 皕杰报表之小程序代码质量检测
最近在被云开发免费的份额,由于一些原因把小程序开发工具升级到了最新版本,新版本上传需要代码质量检测. 一.主包 其中按照官方说明需要提前知道的可优化项: 1. 代码包不包含插件大小超过 1.5 M [ ...
- c语言小程序作业,c语言小程序(c语言简单小程序代码)
所以特此求经典C语言小程序.谢谢大家的关注!!! #include #include void function(int n){ int i,j,k,x=0; for(i=1;i<=n;i++) ...
- 微信小程序入门(四):miniprogram-ci + Jenkins + git 实现小程序代码的上传等操作
目录 1. 实现要求 2. 实现方式一 2.1 Jenkins中其他配置这里不重复了,重点说构建部分的命令 2.2 Jenkins中运行构建任务,在小程序页面检查上传结果,没问题 3. 实现方式二 3 ...
- 自学Matlab必备的60个小程序代码
自学Matlab必备的60个小程序代码 转载自:http://ishare.iask.sina.com.cn/f/9253907.html
- python3经典小程序代码_一个可以套路别人的python小程序实例代码
python可以开发什么?谁有python小程序的源代码,...桌面程序,web都可以,还有比如现在讲的多的人工智能,神经网络源码可以去找一些开源代码,搜索一下,蛮多的. 分享python小程序代码练 ...
最新文章
- The way to Go(6): Go程序的基本结构和要素
- 【MDCC 2015】开源选型之Android三大图片缓存原理、特性对比
- Android 高级进阶之overdraw分析及解决
- 斯坦福大学机器学习第八课“神经网络的表示(Neural Networks: Representation)”
- vue商城项目开发:底部导航菜单(路由)
- js防止表单重复提交
- android 验证码
- Silverlight HTML5 Flash - RIA技术之三足鼎立
- linux 库的头文件安装在,“找不到jpeg的头文件或库文件”在Alpine Linux上安装枕头...
- Dual-arm cooperation and implementing for robotic harvesting tomato using binocular vision(摘西红柿机器人)
- 2011年度最佳开源软件:Bossie奖结果公布
- Java——标准异常
- [bzoj1468][poj1741]Tree_点分治
- Sniffer安全技术从入门到精通
- 14万程序员挑战过的算法趣题
- 一键抠图工具有哪些?这5款亲测好用
- 2021-07-08郝斌C语言笔记
- 木马病毒 与后门技术
- LiveZilla-最好的免费在线客服
- java itextPdf导出pdf
热门文章
- 教你彻底禁止暴风影音后门进程自己启动
- 使用powershell命令,为exchange 2007用户配置邮箱数据
- 02_SSM整合测试与系统间通信(Dubbo)
- BZOJ5216 [Lydsy2017省队十连测]公路建设
- uniapp中获取元素页面信息的方法
- for input string:是什么原因出现的_「汽车空调异味」周期性出现:原因是什么呢?...
- 苹果手机使用说明书_使用苹果手机怎么设置重要提醒事项?
- ApplicationContextAware使用理解
- 主席树入门+博客推荐
- spring-cloud-sleuth 和 分布式链路跟踪系统