#include<iostream>
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/core/core.hpp>
int main(int argc, char* argv[]) {
IplImage *plmg=NULL;//定义一个图像指针
plmg = cvLoadImage("E://1.jpg",1);//加载一个图像赋给图像指针,0为灰度,>0为彩色
if (!plmg) {
printf("can not load image\n");
}
cvFlip(plmg, NULL, 0);//图片翻转 NULL表示原图像吧,0表示翻转方向->可大于0 可小余0
IplImage *pdst = cvCreateImage(CvSize(plmg->height, plmg->width), plmg->depth, plmg->nChannels);
pdst = cvCreateImage(CvSize(200, 400), plmg->depth, plmg->nChannels);
//cvTranspose(plmg,pdst);//图像转置
cvResize(plmg,pdst);//图像的缩放
/*IplImage *img = cvCreateImage(cvSize(300,400),8,3);
CvScalar s;
int i=100, j=150;
s = cvGet2D(img, i, j);
printf("B=%d,G=%d,R=%d",s.val[0],s.val[1],s.val[2]);
s.val[0] = 0;
s.val[1] = 0;
s.val[2] = 254;
cvSet2D(img,i,j,s);//修改彩色图像的像素值(间接修改)
printf("B=%f,G=%f,R=%f", s.val[0], s.val[1], s.val[2]);*/
IplImage *img = cvCreateImage(cvSize(300, 400), 8, 1);
int i = 50, j = 60;
((uchar *)(img->imageData + img->widthStep*i))[j] = 111;//直接修改
IplImage *imgq = cvCreateImage(cvSize(400, 300), 8, 3);
cvZero(imgq);
CV_IMAGE_ELEM(imgq, uchar, i , j * 3 + 0) = 111;//运用宏修改彩色图像的像素值
CV_IMAGE_ELEM(imgq, uchar, i ,j * 3 + 1) = 112;
CV_IMAGE_ELEM(imgq, uchar, i , j * 3 + 2) = 113;
cvNamedWindow("TEST", CV_WINDOW_AUTOSIZE);//创建一个窗口 取名为TEST
cvShowImage("TEST", img);//显示TEST窗口并显示出载入的图像
cvWaitKey(0);//等待一个键盘输入,参数是等待的时间,0表示一直等待;10表示等待10毫秒
cvDestroyWindow("TEST");//销毁窗口
cvReleaseImage(&img);//释放pimg指向的图像内存
return 1;
cvResizeWindow("TEST", 300, 150);//设置窗口大小
cvMoveWindow("TEST", 200, 200);//移动窗口
CvPoint pt = cvPoint(100,200);
pt.x = 300;
pt.y = 200;
CvScalar sc = cvScalar(1.0,0.7,9.0,4.5);
sc.val[0] = 2.0;//val[4]是大小为4的结构体 默认四个值为0
CvSize sz = cvSize(300,500);//设置大小
CvRect rct = cvRect(20, 30, 100, 200);//(20,30)为左上角坐标,100为宽度,200为高度
plmg = cvCreateImage(sz, 8, 1);//cvCreateImage(cvsSize(220,180),8,1);
cvZero(plmg);
cvNamedWindow("TEST", 0);//创建一个窗口 取名为TEST
cvResizeWindow("TEST", 300, 150);//设置窗口大小
cvMoveWindow("TEST", 200, 200);//移动窗口
IplImage *img2;
img2 = cvCloneImage(plmg);//复制图片给img2 需要释放两个空间
img2 = plmg;//指向同一个对象
IplImage *img1 = cvCreateImage(cvSize(640,800),8,1);
IplImage *img3 = cvCreateImage(cvSize(640,800),8,1);
cvCopy(img1,img3,NULL);//将img1复制给img3
cvNamedWindow("T", 1);
cvShowImage("T", img3);
cvSaveImage("E:\\tmp.jpg", img1);//将img1保存在E盘下命名为tmp,并且类型为.jpg
cvShowImage("TEST", plmg);//显示TEST窗口并显示出载入的图像
cvWaitKey(0);//等待一个键盘输入,参数是等待的时间,0表示一直等待;10表示等待10毫秒
cvDestroyWindow("TEST");//销毁窗口
cvReleaseImage(&plmg);//释放pimg指向的图像内存
return 0;
}
#include<iostream>
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/core/core.hpp>
void on_mouse(int event, int x, int y, int flags, void* param) {//鼠标事件处理
IplImage *img = (IplImage *)param;
switch(event)
{
case CV_EVENT_MOUSEMOVE:
if (flags & CV_EVENT_FLAG_CTRLKEY) {
//printf("Left button down with CTRL pressed\n");
CV_IMAGE_ELEM(img, uchar, y , x * 3 + 0) = 0;
CV_IMAGE_ELEM(img, uchar, y , x * 3 + 1) = 0;
CV_IMAGE_ELEM(img, uchar, y , x * 3 + 2) = 255;
}
break;
case CV_EVENT_RBUTTONDOWN:
//printf("Left button up\n");
CV_IMAGE_ELEM(img, uchar, y, x * 3 + 0) = 255;
CV_IMAGE_ELEM(img, uchar, y, x * 3 + 1) = 0;
CV_IMAGE_ELEM(img, uchar, y, x * 3 + 2) = 0;
break;
}
}
void DrawtoBK(IplImage *pbk, IplImage *pobj, int x,int y) {//背景绘制
if (pbk != NULL&&pobj != NULL)
{
for (int i = 0; i < pobj->height; i++)
{
for (int j = 0; j < pobj->width; j++)
{
CV_IMAGE_ELEM(pbk, uchar, y + i, (j + x) * 3 + 0) = CV_IMAGE_ELEM(pobj, uchar, i, j * 3 + 0);
CV_IMAGE_ELEM(pbk, uchar, y + i, (j + x) * 3 + 1) = CV_IMAGE_ELEM(pobj, uchar, i, j * 3 + 1);
CV_IMAGE_ELEM(pbk, uchar, y + i, (j + x) * 3 + 2) = CV_IMAGE_ELEM(pobj, uchar, i, j * 3 + 2);
}
}
}
}
void MoveTower(IplImage *pbk , IplImage *pobj , int x , int y) {//34*32移动物体
IplImage *p;
p = cvLoadImage("11.jpg", 1);
for (int i = 1; i <= 4; i++)
{
cvCopy(p, pbk);
x += 34;
char key = cvWaitKey(500);
if (key == 27)
{
break;
}
DrawtoBK(pbk, pobj, x, y);
cvNamedWindow("Tower", 1);
cvShowImage("Tower", pbk);
}
for (int i = 1; i <= 4; i++)
{
y += 32;
cvCopy(p, pbk);
DrawtoBK(pbk, pobj, x, y);
cvWaitKey(500);
cvNamedWindow("Tower", 1);
cvShowImage("Tower", pbk);
}
}
int main(int argc, char* argv[])
{
IplImage *pbk = NULL;
IplImage *pobj = NULL;
pbk = cvLoadImage("11.jpg",1);
pobj = cvLoadImage("1.jpg",1);
//cvFlip(pbk, NULL, -1);
cvNamedWindow("Tower", 1);
cvMoveWindow("Tower", 100, 100);
//cvSetMouseCallback("Tower", on_mouse, pbk);
while (1)
{
cvWaitKey(1);
cvSetMouseCallback("Tower", on_mouse, pbk);
cvShowImage("Tower", pbk);
}
cvShowImage("Tower", pbk);
int x = 10, y = 10;
DrawtoBK(pbk, pobj, x, y);
MoveTower(pbk, pobj, x, y);
cvWaitKey(0);
cvDestroyWindow("Tower");
cvReleaseImage(&pbk);
cvReleaseImage(&pobj);
return 0;
}