在OpenCV中实现特效之浮雕,雕刻和褶皱

下面代码的基础是对图像像素的访问。实现浮雕和雕刻的代码是统一的,如下

#include <cv.h>   #include <highgui.h>   #pragma comment( lib, "cv.lib" )   #pragma comment( lib, "cxcore.lib" )   #pragma comment( lib, "highgui.lib" )    int main()   {       IplImage *org=cvLoadImage("1.jpg",1);       IplImage *image=cvCloneImage(org);       int width=image->width;       int height=image->height;       int step=image->widthStep;       int channel=image->nChannels;       uchar* data=(uchar *)image->imageData;       for(int i=0;i<width-1;i++)       {           for(int j=0;j<height-1;j++)           {               for(int k=0;k<channel;k++)               {                   int temp = data[(j+1)*step+(i+1)*channel+k]-data[j*step+i*channel+k]+128;//浮雕                    //int temp = data[j*step+i*channel+k]-data[(j+1)*step+(i+1)*channel+k]+128;//雕刻                    if(temp>255)                   {                       data[j*step+i*channel+k]=255;                   }                   else if(temp<0)                   {                       data[j*step+i*channel+k]=0;                   }                   else                   {                       data[j*step+i*channel+k]=temp;                   }               }           }       }       cvNamedWindow("original",1);       cvShowImage("original",org);       cvNamedWindow("image",1);       cvShowImage("image",image);       cvWaitKey(0);        cvDestroyAllWindows();       cvReleaseImage(&image);       cvReleaseImage(&org);       return 0;   }  

原图为

在OpenCV中实现特效之浮雕,雕刻和褶皱

浮雕效果图如下

在OpenCV中实现特效之浮雕,雕刻和褶皱

雕刻效果图如下

在OpenCV中实现特效之浮雕,雕刻和褶皱

下面是实现图像褶皱的代码,效果不是太好,结构过渡不平滑,以后再改进一下。希望能做到波浪化。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/dfbae3c3426cce68e40a51cf6a010bc3.html