接上一篇:圖像(像素)反轉1
上一篇是用cvNot()函數寫得,而這片是通過一個一個像素進行反轉。(參考了網上大牛們的代碼)
一開始時,出現了一些小錯誤,不小心在for循環後多加了一個分號“;”,可悲的VS2008編譯器竟然不報錯,程序可以通過,得出的圖片這樣,
錯誤結果圖:
害得我調試好長時間才搞定。
當然還這樣的錯,主要還是我自己敲代碼不夠仔細。
好了,原歸正傳,正確代碼如下:
- // 圖像的反轉2.cpp : 定義控制檯應用程序的入口點。
- //
- #include "stdafx.h"
- #include "opencv2/opencv.hpp"
- int _tmain(int argc, _TCHAR* argv[])
- {
- //窗口的命名
- cvNamedWindow("Src", 0);
- cvNamedWindow("Dst", 0);
- //改變窗口的大小
- //cvResizeWindow("Src", 200, 250);
- //cvResizeWindow("Dst", 200, 250);
- IplImage* src= 0;
- uchar* data;
- int height;
- int width;
- int step;
- int channels;
- int i;
- int j;
- int k;
- //加載圖像
- src= cvLoadImage("F:\\Opencv_picture\\1212.jpg");
- if(!src) //判斷圖像時候加載成功
- {
- printf("Could not find this image\n");
- }
- //顯示原圖像
- cvShowImage("Src", src);
- height= src->height;
- width= src->width;
- step= src->widthStep;
- channels= src->nChannels;
- data= (uchar* )src->imageData;
- //像素反轉
- for(i=0; i< height; i++)
- {
- for(j=0; j< width; j++)
- {
- for(k=0; k< channels; k++)
- {
- data[i* step+ j* channels+ k]= 255- data[i* step+ j* channels + k];
- }
- }
- }
- //顯示反轉後的圖像
- cvShowImage("Dst", src);
- cvWaitKey(0 );
- cvReleaseImage(&src);
- cvDestroyWindow("Src");
- cvDestroyWindow("Dst");
- return 0;
- }
結果圖請看:使勁的戳我^_^