中值滤波

    xiaoxiao2026-03-13  7

    #include"iostream" #include "opencv2/opencv.hpp" using namespace std; using namespace cv; uchar GetMedianFilter(uchar *a,int len) { uchar tmp; //冒泡排序 for(int i=0;i<len-1;i++) for(int j=0;j<len-i-1;j++) { if(a[j]>a[j+1]) { tmp=a[j]; a[j]=a[j+1]; a[j+1]=tmp; } } if(len&1>0) //是奇数 { return a[len/2]; } else { return (a[len/2]+a[len/2-1])/2; } } void MedianFilter(Mat src,Mat &out,int nFilterW,int nFilterH) { int nWidth=src.cols; int nHeight=src.rows; out.create(nHeight,nWidth,src.type()); uchar *pSrc=NULL; uchar *pOut=out.data; uchar *a=new uchar[nFilterH*nFilterW]; int k=0; for(int i=nFilterH/2;i<nHeight-nFilterH+nFilterH/2;i++) for(int j=nFilterW/2;j<nWidth-nFilterW+nFilterW/2;j++) { k=0; pSrc=(src.data+i*nWidth+j); for(int l=-nFilterH/2;l<nFilterH/2+1;l++) for(int m=-nFilterW/2;m<nFilterW/2+1;m++) { a[k++]=*(pSrc+l*nWidth+m); } *(pOut+i*nWidth+j)=GetMedianFilter(a,nFilterH*nFilterW); } delete a; imshow("src",src); imshow("out",out); //waitKey(0); } void main() { Mat img=imread("C:\\Users\\Administrator\\Desktop\\工作\\testp\\sat.jpg",0); Mat outImg; MedianFilter(img,outImg,7,7); Mat dst; medianBlur(img,dst,7); imshow("opencv_dst",dst); waitKey(0); }
    转载请注明原文地址: https://ju.6miu.com/read-1307921.html
    最新回复(0)