个人手打测试,绝对正确,有问题或疏忽的欢迎大家指正
第一题
#include<math.h>#include<iostream>
#include"cv.h"
#include"highgui.h"
using namespace std;
void main(){
//1.a
float a=-1.5;
a=abs(a);//取绝对值
cout<<cvRound(a)<<endl;//四舍五入
cout<<cvFloor(a)<<endl;//向下取整
cout<<cvCeil(a)<<endl;//向上取整
//1.b
CvRNG rng=cvRNG(cvGetTickCount());//获取时间种子,返回系统时钟频率
cout<<cvRandInt(&rng)%6<<endl;//产生32位随机数
cout<<cvRandReal(&rng)<<endl;//产生0-1之间的随机数
//1.c
CvPoint2D32f point=cvPoint2D32f(2.1,2.1);
CvPoint p=cvPointFrom32f(point);
cout<<p.x<<" "<<p.y<<endl;//输出转化的结果
//1.d
point=cvPointTo32f(p);
cout<<point.x<<" "<<point.y<<endl;
}
第二题
#include<math.h>
#include<iostream>
#include"cv.h"
#include"highgui.h"
using namespace std;
void main(){
IplImage *img=cvCreateImage(cvSize(100,100),IPL_DEPTH_8U,3);
cvZero(img);
cvCircle(img,cvPoint(50,50), 50, cvScalar(255,255,255,0.5), 1, 8, 0);//画一个圈
cvNamedWindow("Example",CV_WINDOW_AUTOSIZE);
cvShowImage("Example",img);//注意这里img不能写成&img
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyWindow("Example");
}
第三题
#include<math.h>
#include<iostream>
#include"cv.h"
#include"highgui.h"
using namespace std;
void main(){
IplImage *img=cvCreateImage(cvSize(100,100),IPL_DEPTH_8U,3);
cvZero(img);
uchar *ptrData=cvPtr2D(img,1,0,NULL);
cvRectangle(img,cvPoint(20,5),cvPoint(40,20),cvScalar(0,255,0),1);
cvNamedWindow("Example");
cvShowImage("Example",img);
cvWaitKey(0);
}
第四题
#include<math.h>
#include<iostream>
#include"cv.h"
#include"highgui.h"
using namespace std;
void main(){
IplImage *img=cvCreateImage(cvSize(100,100),IPL_DEPTH_8U,3);
cvZero(img);
for(int i=5;i<=20;i++)
{
uchar *ptr=(uchar*)(img->imageData+img->widthStep*i);
for(int j=20;j<=40;j++)
{
ptr[3*j]=0;
ptr[3*j+1]=255;
ptr[3*j+2]=0;
}
}
cvNamedWindow("Example");
cvShowImage("Example",img);
cvWaitKey(0);
}
第六题
#include<math.h>
#include<iostream>
#include"cv.h"
#include"highgui.h"
using namespace std;
void main(){
IplImage *img=cvLoadImage("F:\\cat.jpg");
// cvZero(img);
IplImage *img1=cvCreateImageHeader(cvSize(20,30),img->depth,img->nChannels);
IplImage *img2=cvCreateImageHeader(cvSize(20,30),img->depth,img->nChannels);
img1->origin=img->origin;
img2->origin=img->origin;
img1->widthStep=img->widthStep;
img2->widthStep=img->widthStep;
img1->imageData=img->imageData+img->height*10+img->nChannels*5;
img2->imageData=img->imageData+img->height*50+img->nChannels*60;
cvNot(img1,img1);
cvNot(img2,img2);
cvNamedWindow("Example");
cvShowImage("Example",img);
cvWaitKey(0);
}
第七题
#include<math.h>
#include<iostream>
#include"cv.h"
#include"highgui.h"
using namespace std;
void main(){
IplImage *img=cvLoadImage("F:\\cat.jpg");
IplImage *dst=cvCreateImage(cvGetSize(img),img->depth,1);
cvSplit(img,dst,0,0,0);
IplImage *clone1=cvCloneImage(dst);
IplImage *clone2=cvCloneImage(dst);
double max,min;
cvMinMaxLoc(dst,&min,&max);
cout<<"min:"<<min<<" max:"<<max<<endl;
double thresh=(min+max)/2;
cout<<"thresh:"<<thresh<<endl;
cvSet(clone1,cvScalar(thresh));
cvZero(clone2);
cvCmp(dst,clone1,clone2,CV_CMP_GE);
cvSubS(dst,cvScalar(thresh/2),dst,clone2);
cvMinMaxLoc(dst,&min,&max);
thresh=(min+max)/2;
cout<<"thresh:"<<thresh<<endl;
cvNamedWindow("Example");
cvShowImage("Example",dst);
cvWaitKey(0);
}