日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

opencv 金字塔图像分割

發布時間:2025/3/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opencv 金字塔图像分割 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我所知的opencv中分割函數:watershed(只是看看效果,不能返回每類pixel類屬),cvsegmentImage,cvPyrSegmentation(返回pixel類屬)

金字塔分割原理篇在這里,本文只提供代碼。

Segment函數:


[cpp]?view plain?copy ?
  • #include<cv.h>??
  • #include?<cvaux.h>??
  • #include?<opencv\cxcore.hpp>??
  • #include?<opencv.hpp>??
  • #include?<nonfree.hpp>??
  • #include?<core/core.hpp>??
  • #include?<imgproc/imgproc.hpp>??
  • #include?<imgproc/imgproc_c.h>??
  • #include?<vector>??
  • #include?<map>??
  • #include?<highgui.h>??
  • using?namespace?std;??
  • using?namespace?cv;??
  • void?Segment(IplImage*?I)??
  • {??
  • ??
  • ????parameters?initialization//??
  • ????int?mode?=?CV_RETR_LIST;??
  • ????int?level?=?2,?block_size?=?1000;??
  • ????CvMemStorage*?storage?=?cvCreateMemStorage(block_size);??
  • ????CvSeq*?components;??
  • ????double?threshold1?=?100,threshold2?=?50;??
  • ??
  • ????IplImage?*src?=?cvCreateImage(cvGetSize(I),IPL_DEPTH_8U,1);??
  • ????cvCvtColor(I,src,CV_RGB2GRAY);??
  • ????IplImage*?dst?=?cvCreateImage(cvGetSize(I),IPL_DEPTH_8U,1);??
  • ??
  • ????src->width?=?dst->width?=?(I->width?&?-(1?<<?level));??
  • ????src->height?=?dst->height?=?(I->height?&?-(1?<<?level));??
  • ??
  • ????//Segment/??
  • ????cvPyrSegmentation(src,dst,storage,&components,level,threshold1,threshold2);??
  • ????int?ncomp?=?components->total;??
  • ????cout<<"segemented?into?"<<ncomp<<"?components."<<endl;??
  • ??
  • ????//Get?Components/??
  • ????map<int,?int>mapping;//map?color?value?to?component?id?(classify)??
  • ????for?(int?i?=?0;?i<ncomp;?i++)//foreach?connection?component??
  • ????{??
  • ????????CvConnectedComp*?cc?=?(CvConnectedComp*)?cvGetSeqElem(components,i);??
  • ????????cvDrawRect(dst,cvPoint(cc->rect.x,cc->rect.y),cvPoint(cc->rect.x+cc->rect.width,cc->rect.y+cc->rect.height),cvScalar(255,255,0));??
  • ????????mapping.insert(pair<int,int>(cc->value.val[0],i));??
  • ????}??
  • ????cvShowImage("segementation",dst);??
  • ????waitKey();??
  • ????cvReleaseMemStorage(&storage);??
  • }??


  • 彩色圖分割版本:

    [cpp]?view plain?copy ?
  • void?Segment(IplImage*?I)??
  • {??
  • ????parameters?initialization//??
  • ????int?mode?=?CV_RETR_LIST;??
  • ????int?level?=?2,?block_size?=?1000;??
  • ????CvMemStorage*?storage?=?cvCreateMemStorage(block_size);??
  • ????CvSeq*?components;??
  • ????double?threshold1?=?10,threshold2?=?50;??
  • ??
  • ????IplImage?*src?=?cvCreateImage(cvGetSize(I),IPL_DEPTH_8U,3);??
  • ????src?=?cvCloneImage(I);??
  • ????IplImage*?dst?=?cvCreateImage(cvGetSize(I),IPL_DEPTH_8U,3);??
  • ??
  • ????src->width?=?dst->width?=?(I->width?&?-(1?<<?level));??
  • ????src->height?=?dst->height?=?(I->height?&?-(1?<<?level));??
  • ??
  • ????//Segment/??
  • ????cvPyrSegmentation(src,dst,storage,&components,level,threshold1,threshold2);??
  • ????int?ncomp?=?components->total;??
  • ????cout<<"segemented?into?"<<ncomp<<"?components."<<endl;??
  • ??
  • ????//Get?Components/??
  • ????map<int,?int>mapping;//map?color?value?to?component?id?(classify)??
  • ????for?(int?i?=?0;?i<ncomp;?i++)//foreach?connection?component??
  • ????{??
  • ????????CvConnectedComp*?cc?=?(CvConnectedComp*)?cvGetSeqElem(components,i);??
  • ????????cvDrawRect(dst,cvPoint(cc->rect.x,cc->rect.y),cvPoint(cc->rect.x+cc->rect.width,cc->rect.y+cc->rect.height),cvScalar(255,255,0));??
  • ????????mapping.insert(pair<int,int>(cc->value.val[0],i));??
  • ????}??
  • ????cvShowImage("segementation",dst);??
  • ????waitKey();??
  • ????cvReleaseMemStorage(&storage);??
  • } ?
  • from:?http://blog.csdn.net/abcjennifer/article/details/18215953

    總結

    以上是生活随笔為你收集整理的opencv 金字塔图像分割的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。