OpenCV笔记(十四)

来源:互联网 发布:网络创业类型 编辑:程序博客网 时间:2024/05/16 09:42

图像修补

#include<opencv2/opencv.hpp>#include<opencv2/highgui/highgui.hpp>#include<iostream>using namespace cv;using namespace std;Mat srcImage1,inpaintMask;Point previousPoint(-1,-1);void on_mouse(int event,int x,int y,int flags,void*){if(event==EVENT_LBUTTONUP||!(flags&EVENT_FLAG_LBUTTON))previousPoint=Point(-1,-1);else if(event==EVENT_LBUTTONDOWN)previousPoint=Point(x,y);else if(event==EVENT_MOUSEMOVE&&(flags&EVENT_FLAG_LBUTTON)){Point pt(x,y);cout<<pt<<endl;if(previousPoint.x<0)previousPoint=pt;line(inpaintMask,previousPoint,pt,Scalar::all(255),15,7,0);line(srcImage1,previousPoint,pt,Scalar::all(255),15,7,0);previousPoint=pt;imshow("1",srcImage1);}}int main(){Mat srcImage=imread("redflo.bmp");srcImage1=srcImage.clone();inpaintMask=Mat::zeros(srcImage1.size(),CV_8U);imshow("1",srcImage);setMouseCallback("1",on_mouse,0);while(1){char c=waitKey();if(c==27) break;if(c=='2'){inpaintMask=Scalar::all(0);srcImage.copyTo(srcImage1);imshow("1",srcImage1);}if(c=='1'||c==' '){Mat inpaintedImage;inpaint(srcImage1,inpaintMask,inpaintedImage,3,CV_INPAINT_NS);//需修补的原图,需修补掩模,修复输出图,修补点半径imshow("2",inpaintedImage);}}return 0;}


直方图:

#include<opencv2/opencv.hpp>#include<opencv2/highgui/highgui.hpp>#include<iostream>using namespace cv;using namespace std;int main(){Mat srcImage=imread("building.jpg",0);imshow("src",srcImage);MatND dstHist;int dims=1;float hranges[]={0,255};const float *range[]={hranges};int size=256;int channels=0;calcHist(&srcImage,1,&channels,Mat(),dstHist,dims,&size,range);//输入图像的指针,图像张数,通道索引,掩模,直方图,直方图维度,存放直方图的数组尺寸,每一维数值的取值范围//int scale=1;Mat dstImage(size,size,CV_8U,Scalar(0));double minValue=0;double maxValue=0;minMaxLoc(dstHist,&minValue,&maxValue,0,0);int hpt=saturate_cast<int>(0.9*size);for(int i=0;i<256;i++){float binValue=dstHist.at<float>(i);//cout<<binValue<<" ";int realValue=saturate_cast<int>(binValue*hpt/maxValue);rectangle(dstImage,Point(i,size-1),Point(i,size-realValue),Scalar(255));}imshow("hist",dstImage);waitKey(0);}




0 0
原创粉丝点击