图像(像素)反转二
图像(像素)反转2接上一篇:图像(像素)反转1上一篇是用cvNot()函数写得,而这片是通过一个一个像素进行反转。(
图像(像素)反转2
接上一篇:图像(像素)反转1
上一篇是用cvNot()函数写得,而这片是通过一个一个像素进行反转。(参考了网上大牛们的代码)
一开始时,出现了一些小错误,不小心在for循环后多加了一个分号“;”,可悲的VS2008编译器竟然不报错,程序可以通过,得出的图片这样,
错误结果图:
害得我调试好长时间才搞定。
当然还这样的错,主要还是我自己敲代码不够仔细。
好了,原归正传,正确代码如下:
[cpp] view plaincopy
- // 图像的反转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;
- }
结果图请看:使劲的戳我^_^