读书人

图像(像素)反转二

发布时间: 2013-11-03 15:39:14 作者: rapoo

图像(像素)反转2

接上一篇:图像(像素)反转1

上一篇是用cvNot()函数写得,而这片是通过一个一个像素进行反转。(参考了网上大牛们的代码)

一开始时,出现了一些小错误,不小心在for循环后多加了一个分号“;”,可悲的VS2008编译器竟然不报错图像(像素)反转二,程序可以通过,得出的图片这样,

错误结果图:

图像(像素)反转二

害得我调试好长时间才搞定。

当然还这样的错,主要还是我自己敲代码不够仔细。

好了,原归正传,正确代码如下:

[cpp] view plaincopy
  1. // 图像的反转2.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #include "opencv2/opencv.hpp"
  5. int _tmain(int argc, _TCHAR* argv[])
  6. {
  7. //窗口的命名
  8. cvNamedWindow("Src", 0);
  9. cvNamedWindow("Dst", 0);
  10. //改变窗口的大小
  11. //cvResizeWindow("Src", 200, 250);
  12. //cvResizeWindow("Dst", 200, 250);
  13. IplImage* src= 0;
  14. uchar* data;
  15. int height;
  16. int width;
  17. int step;
  18. int channels;
  19. int i;
  20. int j;
  21. int k;
  22. //加载图像
  23. src= cvLoadImage("F:\\Opencv_picture\\1212.jpg");
  24. if(!src) //判断图像时候加载成功
  25. {
  26. printf("Could not find this image\n");
  27. }
  28. //显示原图像
  29. cvShowImage("Src", src);
  30. height= src->height;
  31. width= src->width;
  32. step= src->widthStep;
  33. channels= src->nChannels;
  34. data= (uchar* )src->imageData;
  35. //像素反转
  36. for(i=0; i< height; i++)
  37. {
  38. for(j=0; j< width; j++)
  39. {
  40. for(k=0; k< channels; k++)
  41. {
  42. data[i* step+ j* channels+ k]= 255- data[i* step+ j* channels + k];
  43. }
  44. }
  45. }
  46. //显示反转后的图像
  47. cvShowImage("Dst", src);
  48. cvWaitKey(0 );
  49. cvReleaseImage(&src);
  50. cvDestroyWindow("Src");
  51. cvDestroyWindow("Dst");
  52. return 0;
  53. }

结果图请看:使劲的戳我^_^

读书人网 >图形图像

热点推荐