在opencv中
我在显示2*4排列的8副图片后,需要实现任意交换二张图片,这里在交换图片之后,需要用到重绘8副图片。但是在重绘是不能保存上一次的交换结果,我知道程序的逻辑不对但是找不到方法。我的程序如下:
void onmouse(int event, int x, int y, int flag, void *param)
{
IplImage *BackImg;
IplImage *temp,*SZImg[8];
int a,b;
int m=0,n,width=204,height=204;
BackImg = cvLoadImage( "img\\back.jpg", 1);
cvNamedWindow( "Image", CV_WINDOW_AUTOSIZE );
SZImg[0]= cvLoadImage( "img\\1.jpg", 1);//载入图像
SZImg[1]= cvLoadImage( "img\\2.jpg", 1);//载入图像
SZImg[2]= cvLoadImage( "img\\3.jpg", 1);//载入图像
SZImg[3]= cvLoadImage( "img\\4.jpg", 1);//载入图像
SZImg[4]= cvLoadImage( "img\\5.jpg", 1);//载入图像
SZImg[5]= cvLoadImage( "img\\6.jpg", 1);//载入图像
SZImg[6]= cvLoadImage( "img\\7.jpg", 1);//载入图像
SZImg[7]= cvLoadImage( "img\\8.jpg", 1);//载入图像
if(event== CV_EVENT_LBUTTONDOWN)
{
startpoint0 = cvPoint(x,y);
startpoint.x=startpoint0.x;
startpoint.y=startpoint0.y;
}
else if(event== CV_EVENT_RBUTTONDOWN)
{
endpoint0=cvPoint(x,y);
endpoint.x =endpoint0.x;
endpoint.y =endpoint0.y;
if(startpoint.y<204)
a=startpoint.x/204;//判断鼠标左击图片
else
a=startpoint.x/204+4;
if(endpoint.y<204)
b=endpoint.x/204;//判断鼠标右击图片
else
b=endpoint.x/204+4;
temp =SZImg[a]; //图片交换
SZImg[a]=SZImg[b];
SZImg[b]=temp;
m=0, n=0;
cvCopySubImage(BackImg, cvRect(m,n,204,204), SZImg[0]);
m = 204,n=0;
cvCopySubImage(BackImg, cvRect(m,n,204,204), SZImg[1]);
m = 408,n=0;
cvCopySubImage(BackImg, cvRect(m,n,204,204), SZImg[2]);
m = 612,n=0;
cvCopySubImage(BackImg, cvRect(m,n,204,204), SZImg[3]);
m = 0, n=204;
cvCopySubImage(BackImg, cvRect(m,n,204,204), SZImg[4]);
m = 204,n=204;
cvCopySubImage(BackImg, cvRect(m,n,204,204), SZImg[5]);
m = 408,n=204;
cvCopySubImage(BackImg, cvRect(m,n,204,204), SZImg[6]);
m = 612,n=204;
cvCopySubImage(BackImg, cvRect(m,n,204,204), SZImg[7]);
cvShowImage( "Image", BackImg ); //显示图像
cvWaitKey(0); //等待按键
}
}