新手求助,对图像做水平镜像处理
opencv吧
全部回复
仅看楼主
level 1
木紫拉 楼主
#include "highgui.h"
#include "windows.h"
void JingXiang(IplImage* srcImage, IplImage* dstImage)
{
BYTE*lpSrc;
BYTE*lpDst;
BYTE* p_data;
BYTE* temp;
//图像的高与宽
long height=srcImage->height;
long wide=srcImage->width;
p_data=(BYTE*)srcImage->imageData;
temp = new BYTE[wide*height];
for(int j = 0; j < height; j++)
{
for(int i = 0; i < wide;i++)
{
lpSrc = (BYTE*)p_data +wide *j + i;
lpDst = (BYTE*)temp + wide* j+ wide - i;
*lpDst = *lpSrc;
}
}
memcpy(p_data,temp, wide*height);
delete temp;
dstImage = cvCreateImage(cvSize(wide,height),IPL_DEPTH_8U,1);
cvSetData(dstImage,p_data,wide);
}
int main(int argc, char** argv){
IplImage* img = cvLoadImage("1.bmp");
cvNamedWindow("ShowImage",CV_WINDOW_AUTOSIZE);
cvShowImage("ShowImage",img);
int width = img->width;
int height = img->height;
IplImage* dstImage = cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1);
JingXiang(img,dstImage);
cvNamedWindow("TransImage",CV_WINDOW_AUTOSIZE);
cvShowImage("TransImage",dstImage);
cvWaitKey(0);
cvReleaseImage(&img);
cvReleaseImage(&dstImage);
cvDestroyWindow("ShowImage");
cvDestroyWindow("TransImage");
}
初学opencv,也正好看到VC++图像处理程序设计这本书里有很多例子,想用起来,结果一直出错,编程能力有待提高。求助求助。
2017年09月06日 10点09分 1
level 7
void JingXiang(IplImage* srcImage, IplImage* dstImage)
{
char*lpSrc;
char*lpDst;
//图像的高与宽
long height=srcImage->height;
long wide=srcImage->width;
for(int j = 0; j < height; j++)
{
lpSrc = srcImage->imageData + j * srcImage->widthStep;//1。
lpDst = dstImage->imageData + j * dstImage->widthStep;//2。
for(int i = 0; i < wide;i++)
{
lpDst[wide - i] =lpSrc[i * srcImage->nChannels + 0];//3。
//如果用下面一句,就去掉上面的三句
//((uchar *)(dstImage->imageData + ( j) * dstImage->widthStep ))[wide - i]= ((uchar *)(srcImage->imageData + j * srcImage->widthStep ))[i * srcImage->nChannels + 0] ;
}
}
}
2017年09月07日 13点09分 3
只对JingXiang函数修改 。图象数据不一定连续的
2017年09月07日 13点09分
level 7
2017年09月07日 13点09分 4
非常感谢,刚试了下,是对的。那我的错误是在这三行吗,我看你后面用的widthStep,我的wide就是图片的宽。lpSrc = (BYTE*)p_data +wide *j + i; lpDst = (BYTE*)temp + wide* j+ wide - i; *lpDst = *lpSrc;
2017年09月08日 06点09分
老哥,我用CDIB做的水平镜像,镜像是镜像了但是图会变色,有的变绿有的变蓝,代码和楼上的老哥一样,求指点一下原因
2020年05月01日 08点05分
@SK_y 三个通道单独做就不会变色了
2020年05月02日 06点05分
1