您的位置:首页 > 运维架构

学习opencv课后答案第三章

2015-03-29 22:10 369 查看
个人手打测试,绝对正确,有问题或疏忽的欢迎大家指正

第一题

#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);

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: