【學習opencv第七篇】映像的閾值化

來源:互聯網
上載者:User

映像閾值化的基本思想是,給定一個數組和一個閾值,然後根據數組中每個元素是低於還是高於閾值而進行一些處理。

cvThreshold()函數如下:

double cvThreshold(CvArr* src,  CvArr* dst,double threshold,     double max_value,    int threshold_type)

cvShold函數只能處理8位或者浮點灰階映像,靶心圖表像必須與源映像一致,或者為8為映像。

實現閾值化的代碼如下:

#include "stdafx.h"#include <highgui.h>#include <math.h>#include <cv.h>using namespace std;int main(){IplImage* sourceImage;IplImage* dstImage;   if(!(sourceImage=cvLoadImage("Hough.jpg")))return -1;dstImage=cvCreateImage(cvGetSize(sourceImage),sourceImage->depth,1);IplImage* r=cvCreateImage(cvGetSize(sourceImage),IPL_DEPTH_8U,1);IplImage* g=cvCreateImage(cvGetSize(sourceImage),IPL_DEPTH_8U,1);IplImage* b=cvCreateImage(cvGetSize(sourceImage),IPL_DEPTH_8U,1);IplImage* tempImage=cvCreateImage(cvGetSize(sourceImage),IPL_DEPTH_8U,1);cvSplit(sourceImage,r,g,b,NULL);cvAddWeighted(r,1./3.,g,1./3.,0.0,tempImage);cvAddWeighted(tempImage,1,b,1./3.,0.0,tempImage);cvThreshold(tempImage,dstImage,100,255,CV_THRESH_BINARY);//對於大於100的設為255cvNamedWindow("sourceImage");cvNamedWindow("dstImage");cvShowImage("sourceImage",sourceImage);cvShowImage("dstImage",dstImage);cvWaitKey(-1);cvReleaseImage(&r);cvReleaseImage(&g);cvReleaseImage(&b);cvDestroyWindow("sourceImage");cvDestroyWindow("dstImage");cvReleaseImage(&sourceImage);cvReleaseImage(&dstImage);return 0;}

運行結果:


在自適應閾值中,閾值本身就是一個變數,實現自適應閾值的代碼如下:


#include "stdafx.h"#include <highgui.h>#include <math.h>#include <cv.h>int main(){IplImage* sourceImage;//直接以灰階映像載入if(!(sourceImage=cvLoadImage("Hough.jpg",CV_LOAD_IMAGE_GRAYSCALE)))return -1;IplImage* dstImage=cvCreateImage(cvGetSize(sourceImage),IPL_DEPTH_8U,1);//這個函數只能處理單通道映像或者8位元影像像,並且要求源映像與靶心圖表像不能為同一個映像cvAdaptiveThreshold(sourceImage,dstImage,255,     //max_valCV_ADAPTIVE_THRESH_MEAN_C,CV_THRESH_BINARY,3,      //block_size5       //offset);cvNamedWindow("AdaptiveThreshold",0);cvShowImage("AdaptiveThreshold",dstImage);//單一閾值IplImage* dstImage2=cvCreateImage(cvGetSize(sourceImage),IPL_DEPTH_8U,1);cvThreshold(sourceImage,dstImage2,100,255,CV_THRESH_BINARY);cvNamedWindow("sourceImage",0);cvNamedWindow("Threshold",0);cvShowImage("sourceImage",sourceImage);cvShowImage("Threshold",dstImage2);cvWaitKey(-1);//釋放資源cvDestroyWindow("sourceImage");cvDestroyWindow("Threshold");cvDestroyWindow("AdaptiveThreshold");cvReleaseImage(&sourceImage);cvReleaseImage(&dstImage);cvReleaseImage(&dstImage2);return 0;}

運行結果:

Reference《學習opencv》

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.