下面代码的基础是对图像像素的访问。实现浮雕和雕刻的代码是统一的,如下
#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; }
原图为
浮雕效果图如下
雕刻效果图如下
下面是实现图像褶皱的代码,效果不是太好,结构过渡不平滑,以后再改进一下。希望能做到波浪化。