当前位置:文档之家› opencv简单代码

opencv简单代码

(1)分配内存给一幅新图像
IplImage*
cvCreateImage(CvSizesize, int depth, int channels);
size: cvSize(width,height);
depth: 像素深度: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U, channels: 像素通道数. Can be 1, 2, 3 or 4.
示例:
// Allocate a1-channel byte image
IplImage*
img1=cvCreateIm
age(cvSize(640,480),IPL_DEPTH_8U,1);
(2)释放图像
IplImage*
img=cvCreateIma
ge(cvSize(640,480),IPL_DEPTH_8U,1);
cvReleaseImage(&img);
(3)复制图像
IplImage*
img1=cvCreateIm
age(cvSize(640,480),IPL_DEPTH_8U,1);
IplImage* img2;
img2=cvCloneImage(img1);
(4)从文件中读入图像
IplImage*
img=0;
img=cvLoadImage
(fileName);
if(!img)
printf("Couldnot load imagefile:%s\n",fileName);
(5)头文件:
#include <cv.h>
#include <cvaux.h>
#include <highgui.h>
#include <cxcore.h> // 不必要- 该头文件已在cv.h 文件中包含(6)响应键盘事件:
直接获取键盘操作:
int key;
key=cvWaitKey(10); // 输入等待10ms
等待按键并获取键盘操作:
int key;
key=cvWaitKey(0); // 无限等待键盘输入
键盘输入循环:
while(1){key=cvWaitKey(10);if(key==27) break;
switch(key){
case 'h':
...
break;
case 'i':
...
break;
}
}
(7)图像转换
转为灰度或彩色字节图像:
cvConvertImage(src, dst, flags=0);
src = float/byte grayscale/color image
dst = byte grayscale/color image
flags = CV_CVTIMG_FLIP (flip vertically)
CV_CVTIMG_SWAP_RB (swap the R and B channels)
转换彩色图像为灰度图像:
使用OpenCV转换函数:
cvCvtColor(cimg,gimg,CV_BGR2GRAY); // cimg -> gimg
直接转换:
for(i=0;i<cimg->height;i++) for(j=0;j<cimg->width;j++)
gimgA[i][j]=(uchar)(cimgA[i][j].b*0.114+cimgA[i][j].g*0.587+cimgA[i][j].r*0.29;
颜色空间转换:
cvCvtColor(src,dst,code); // src -> dst
code = CV_<X>2<Y>
<X>/<Y> = RGB, BGR, GRAY, HSV, YCrCb, XYZ, Lab, Luv, HLS e.g.: CV_BGR2GRAY, CV_BGR2HSV, CV_BGR2Lab
(8)作业三的代码
#include<string>
#include<sstream>
#include<cv.h>
#include<highgui.h>
using namespace std;
using namespace cv;
int main ()
{
Mat second_pic;
Mat result;
String buffer;
cout << "Input First Pic filename :";
cin >> buffer;
result = imread(buffer);
cout << "Input Second Pic filename :";
cin >> buffer;
second_pic = imread(buffer);
Mat mask(result.rows, result.cols, CV_32F);
for(int i = 0 ; i < result.rows ; i++)
{
for(int j = 0 ; j < result.cols ; j++)
{
mask.at<float>(i, j) = fastAtan2(result.rows / 2 - i, j - result.cols / 2);
}
}
int result_number;
stringstream temp;
cout << "How many results you want?";
cin >> buffer;
temp << buffer;
temp >> result_number;
for(int i = 0 ; i <= result_number ; ++i )
{
second_pic.copyTo(result, mask < i * 360.0 / result_number);
imshow("Result", result);
imshow("Mask", mask < i * 360.0 / result_number);
cvWaitKey(0);
temp.clear();
temp << i;
temp >> buffer;
string temp_string = "result" + buffer + ".jpg";
imwrite(temp_string, result);
}
}。

相关主题