OpenCV映像操作-映像反色操作

來源:互聯網
上載者:User

建立MFC工程,從檔案中讀入一幅映像,將之反色,然後顯示原圖片和反色之後的圖片。

[cpp]
view plaincopyprint?
  1. /*******************************************************************************
  2. 函數名稱  : MakeMat
  3. 函數描述  : 使用OpenCV進行映像操作
  4. 輸入參數  : N/A
  5. 輸出參數  : N/A
  6. 返 回值    : N/A
  7. 作  者      :  hewenming 2012.11.14
  8. *******************************************************************************/  
  9. void MakeMat() 
  10.      IplImage* src = NULL; 
  11.  
  12.      //載入圖片至記憶體 
  13.      src = cvLoadImage("750x500_1126054.bmp"); 
  14.      if (NULL == src) 
  15.      { 
  16.          AfxMessageBox(_T("圖片載入失敗!")); 
  17.          return; 
  18.      } 
  19.  
  20.      //擷取圖片的一些屬性 
  21.      int height = src->height;                    
    // 映像高度 
  22.      int width = src->width;                      
    // 映像寬度(像素為單位) 
  23.      int step = src->widthStep;                
    // 相鄰行的同列點之間的位元組數 
  24.      int channels = src->nChannels;        
    // 色彩通道數目 (1,2,3,4) 
  25.      uchar *data   = (uchar *)src->imageData; 
  26.  
  27.  
  28.      //建立標題名為“美女”的對話方塊 
  29.      cvNamedWindow("美女"); 
  30.      cvMoveWindow("美女", 600, 250);  
  31.  
  32.      //建立名為“反色”的對話方塊 
  33.      cvNamedWindow("反色"); 
  34.      cvShowImage("美女",src); 
  35.  
  36.  
  37.      //反色操作 
  38.      for(int i=0;i != height; ++ i)  
  39.      { 
  40.          for(int j=0;j != width; ++ j) 
  41.          { 
  42.              for(int k=0;k != channels; ++ k) 
  43.              { 
  44.                   data[i*step+j*channels+k]=255-data[i*step+j*channels+k];  
  45.              } 
  46.          } 
  47.      }  
  48.          
  49.  
  50.      //將圖片顯示到對話方塊中 
  51.      cvShowImage("反色",src); 
  52.      cvWaitKey(0); 
  53.  
  54.      //釋放記憶體與對話方塊銷毀 
  55.      cvReleaseImage(&src); 
  56.      cvDestroyWindow("美女"); 
  57.      cvDestroyWindow("反色"); 
  58.  
  59.      //退出 
  60.      exit(0); 
/******************************************************************************* 函數名稱  : MakeMat函數描述  : 使用OpenCV進行映像操作輸入參數  : N/A 輸出參數  : N/A 返 回值    : N/A 作  者      :  hewenming 2012.11.14*******************************************************************************/ void MakeMat(){ IplImage* src = NULL; //載入圖片至記憶體 src = cvLoadImage("750x500_1126054.bmp"); if (NULL == src) { AfxMessageBox(_T("圖片載入失敗!")); return; } //擷取圖片的一些屬性 int height = src->height;                     // 映像高度 int width = src->width;                       // 映像寬度(像素為單位) int step = src->widthStep;                 // 相鄰行的同列點之間的位元組數 int channels = src->nChannels;         // 色彩通道數目 (1,2,3,4) uchar *data   = (uchar *)src->imageData; //建立標題名為“美女”的對話方塊 cvNamedWindow("美女"); cvMoveWindow("美女", 600, 250);  //建立名為“反色”的對話方塊 cvNamedWindow("反色"); cvShowImage("美女",src); //反色操作 for(int i=0;i != height; ++ i)  { for(int j=0;j != width; ++ j) { for(int k=0;k != channels; ++ k) {  data[i*step+j*channels+k]=255-data[i*step+j*channels+k];  } } }  //將圖片顯示到對話方塊中 cvShowImage("反色",src); cvWaitKey(0); //釋放記憶體與對話方塊銷毀 cvReleaseImage(&src); cvDestroyWindow("美女"); cvDestroyWindow("反色"); //退出 exit(0);}

如果想儲存反色後的映像,添加以下代碼即可:

[cpp]
view plaincopyprint?
  1. //儲存反色後的映像 
  2. cvSaveImage("反色.bmp",src); 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.