学习opencv课后答案第三章

个人手打测试,绝对正确,有问题或疏忽的欢迎大家指正

第一题

#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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值