您的位置:首页 > 其它

一个简单的图像形状变换

2016-05-16 17:30 351 查看
自己想的,比较简单粗糙。
#include <stdio.h>
#include <iostream>
#include "cv.h"
#include "highgui.h"

int main()
{
int i,j;
uchar* srcptr;
uchar* dstptr;
IplImage* src = cvLoadImage("H:\\pictures\\tree.jpg");
int srcWidth = src->widthStep;
int srcHeight = src->height;
int halfH = srcHeight/2;
int index;
IplImage * dst = cvCreateImage(cvSize(srcWidth/3,srcHeight), src->depth, src->nChannels);
uchar* data = (uchar*)dst->imageData;
for ( i = 0; i < srcHeight; i++)
{
for (j = 0; j < srcWidth; j++)
{
data[i * srcWidth + j ] = 255;
}
}
for (j = 0; j < src->widthStep; j++)
{
for (i = 0; i < srcHeight; i++)
{
if (i <= halfH)
{
index = j*srcHeight/(3*srcWidth);
if (i >= index)
{
if ((i-index)*halfH/(halfH-index) >= srcHeight)
{
continue;
}
dstptr = (uchar*)(dst->imageData + i * dst->widthStep);
srcptr = (uchar*)(src->imageData + (i-index)*halfH/(halfH-index) * src->widthStep);
dstptr[j] = srcptr[j];
}
else
{
dstptr[j] = 0;
}
}
else
{
index = j*srcHeight/(3*srcWidth);
if (i <= srcHeight - index)
{
if (halfH + halfH*(i - halfH)/(halfH - index) >= srcHeight)
{
continue;
}
dstptr = (uchar*)(dst->imageData + i * dst->widthStep);
srcptr = (uchar*)(src->imageData + (halfH + halfH*(i - halfH)/(halfH - index)) * src->widthStep);
dstptr[j] = srcptr[j];
}
else
{
dstptr[j] = 0;
}
}
}
}
cvSaveImage("H:\\pictures\\tree1.jpg",dst);
cvNamedWindow("src", 0);
cvNamedWindow("dst", 0);
cvShowImage("src", src);
cvShowImage("dst", dst);
cvWaitKey(0);
cvDestroyWindow("src");
cvDestroyWindow("dst");
cvReleaseImage(&src);
cvReleaseImage(&dst);
return 0;
}
原图像:



变换后的图像:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: