C+opencv 가 실현 하 는 파란색 바탕 사진 을 흰색 바탕 사진 으로 바 꾸 는 기능 의 전체 예제

3157 단어 C++opencv사진.
본 고 는 C++opencv 가 실현 한 파란색 바탕 사진 을 흰색 바탕 사진 으로 바 꾸 는 기능 을 실례 로 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.

#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;//  cv    
int main()
{
 char *origin="Original";
 char *window="Image";
 char *str="G:\\yay.jpg";
 namedWindow(origin,1);
 namedWindow(window,1);
 Mat image=imread(str);
 if(!image.data)
 {
  cout<<"        "<<endl;
  return 0;
 }
 Mat roi=image(Rect(20,20,20,20));
 Mat hsvImg;
 cvtColor(image, hsvImg, CV_BGR2HSV); //      HSV    
 //  HSV  ,v[0] H  ,v[1] S   ,v[2] v  
 vector<Mat> v;
 split(hsvImg,v);
 Mat roiH=v[0](Rect(20,20,20,20));
 Mat roiS=v[1](Rect(20,20,20,20));
 int SumH=0;
 int SumS=0;
 int avgH, avgS;//             
 //       ,               
 for(int i=0; i<20; i++)
 {
  for(int j=0; j<20; j++)
  {
   /*SumH=SumH+roiH(i,j);*/
   SumH=int(roiH.at<uchar>(j,i))+SumH;
   SumS=int(roiS.at<uchar>(j,i))+SumS;
  }
 }
 avgH=SumH/400;
 avgS=SumS/400;
 //      
 int nl=hsvImg.rows;
 int nc=hsvImg.cols;
 int step=10;
 for(int j=0; j<nl; j++)
 {
  for(int i=0; i<nc; i++)
  {
   // H.S         ,        
   if((v[0].at<uchar>(j,i))<=(avgH+5) && v[0].at<uchar>(j,i)>=(avgH-5)
    &&(v[1].at<uchar>(j,i))<=(avgS+40) && v[1].at<uchar>(j,i)>=(avgS-40))
   {
    //cout<<int(v[0].at<uchar>(j,i))<<endl;
    //   
    //v[0].at<uchar>(j,i)=0;
    //   
    v[0].at<uchar>(j,i)=0;
    v[1].at<uchar>(j,i)=0; //V[0] V[1]   0      
    //   
    //v[0].at<uchar>(j,i)=60;
    //   
    //v[0].at<uchar>(j,i)=120;
    /*cout<<int(v[0].at<uchar>(j,i))<<endl;*/
   }
  }
 }
 Mat finImg;
 merge(v,finImg);
 Mat rgbImg;
 cvtColor(finImg,rgbImg, CV_HSV2BGR); //      RGB  
 imshow(origin,image);
 imshow(window,rgbImg);
 //             (          ,      ,     。)
 Mat result;
 GaussianBlur(rgbImg,result,Size(3,3),0.5);
 imshow(window,result);
 imwrite("new.jpg",result);
 waitKey(0);
 //system("pause");
 return 0;
}

이 효 과 는 이전 보다 좋 습 니 다.그림 비교:


참고 글:https://www.jb51.net/article/176326.htm
본 논문 에서 말 한 것 이 여러분 의 C+프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기