计算机图形图像实验
一. 图像处理初步
1. opencv安装,配置
VS配置opencv时,要修改三个地方,如下图
2.图像读取与显示
//CvArr
//CvMat 是CvArr的子类
//IplImage 是CvMat的子类,这里使用IplImage读取和显示文件
IplImage* img1 = cvLoadImage(imagename1);
cvShowImage("title", img);
cvWaitKey(0);
//释放内存
cvReleaseImage(&img1);
//销毁窗口
cvDestroyWindow("title");
3.图像信息
//宽
img->width
//高
img->height
//大小,这个好像与实际大小不太相符,不是很清楚
img->size
二. 图像基本运算
1.加减乘除
图形相加
void add() {
cout << "图片加法运算" << endl;
const char* imagename1 = "1_add.jpg";
const char* imagename2 = "2_add.jpg";
IplImage* img1 = cvLoadImage(imagename1);
IplImage* img2 = cvLoadImage(imagename2);
//获取两图片的最小宽、最小高
int min_width = min(img1->width, img2->width);
int min_height = min(img1->height, img2->height);
//cvSetImageROI设置感兴趣区域,在此处进行操作
cvSetImageROI(img1, CvRect(0, 0, min_width, min_height));
cvSetImageROI(img2, CvRect(0, 0, min_width, min_height));
//两图片相加
cvAddWeighted(img1, 0.5, img2, 0.5, 0.0, img1);
cvShowImage("图片相加", img1);
cvWaitKey(0);
//释放内存
cvReleaseImage(&img1);
//销毁窗口
cvDestroyWindow("图片相加");
}
实验结果:
图像一 | 图像二 | 结果 |
图形相减
void sub() {
cout << "图片减法运算" << endl;
const char* imagename1 = "1_sub.jpg";
const char* imagename2 = "2_sub.jpg";
IplImage* img1 = cvLoadImage(imagename1);
IplImage* img2 = cvLoadImage(imagename2);
int min_width = min(img1->width, img2->width);
int min_height = min(img1->height, img2->height);
cvSetImageROI(img1, CvRect(0, 0, min_width, min_height));
cvSetImageROI(img2, CvRect(0, 0, min_width, min_height));
cout << "图片一:" << img1->width << " " << img1->height << endl;
cout << "图片二:" << img2->width << " " << img2->height << endl;
//cvAddWeighted(img1, 0.5, img2, -0.5, 0.0, img1);
cvSub(img1, img2, img1);
cvShowImage("图片相减", img1);
cvWaitKey(0);