【练习6.5】

提纲
题目要求
程序代码
结果图片
要言妙道

题目要求:

优秀代码参考:

 1 #include <iostream>
 2 #include <cv.h>
 3 #include <highgui.h>
 4 #include <cxcore.h>
 5
 6 using namespace std;
 7 const CvSize size = cvSize(200,200);
 8 const int aperture[] = {3,5,9,11,13,17};
 9 int main()
10 {
11     IplImage *src = cvCreateImage(size,8,1);
12     cvZero(src);
13     cvLine(src
14         //,cvPoint(0,size.height - 1)
15         //,cvPoint(size.width -1 , 0)
16         ,cvPoint(0,0)
17         ,cvPoint(size.width - 1, size.height - 1)
18         ,CV_RGB(255,255,255)
19         ,3
20         );
21     cvShowImage("src",src);
22
23     IplImage *deriv_x = cvCreateImage(size,IPL_DEPTH_32F,1);
24     IplImage *deriv_y = cvCreateImage(size,IPL_DEPTH_32F,1);
25     IplImage *magnitude = cvCreateImage(size,IPL_DEPTH_32F,1);
26     IplImage *angle = cvCreateImage(size,IPL_DEPTH_32F,1);
27     IplImage *mask = cvCreateImage(size,IPL_DEPTH_8U,1);
28     for(int i=0;i<sizeof(aperture)/sizeof(aperture[0]);++i){
29         cvSobel(src,deriv_x,1,0,aperture[i]);
30         cvSobel(src,deriv_y,0,1,aperture[i]);
31
32         cvCartToPolar(deriv_x,deriv_y,magnitude,angle,1);
33
34         cvSave("x.xml",deriv_x);
35         cvSave("y.xml",deriv_y);
36         cvSave("magnitude.xml",magnitude);
37         cvSave("angle.xml",angle);
38
39         double max_mag ,min_mag ,max_angle , min_angle;
40         cvMinMaxLoc(magnitude,&min_mag,&max_mag);
41         cvMinMaxLoc(angle,&min_angle,&max_angle);
42         cout<<"magnitude: max = "<<max_mag<<" min = "<<min_mag<<endl;
43         cout<<"angle : max = "<<max_angle<<" min = "<<min_angle<<endl;
44
45         cvCmpS(magnitude,max_mag*3/4,mask,CV_CMP_GT);
46         cvShowImage("mask",mask);
47
48         CvScalar scalar = cvAvg(angle,mask);
49         cout<<"aperture = "<<aperture[i]<<", line angle = "<<scalar.val[0]<<endl;
50         cvWaitKey();
51     }
52     cvReleaseImage(&src);
53     cvReleaseImage(&magnitude);
54     cvReleaseImage(&angle);
55     cvReleaseImage(&mask);
56     cvDestroyAllWindows();
57
58 }

源自:学习opencv第六章习题5 , 使用x,y阶层数求出图像内唯一直线的角度

程序代码:

结果图片:

要言妙道:

时间: 2024-10-08 10:04:25

【练习6.5】的相关文章

《MySQL入门很简单》练习10.9

(1)在查询之前,先按照表10.3和表10.4的内容创建student表和score表 首先我创建一个本章的数据库(名字随便取,主要是每个程序猿都不应该被规矩束缚对不对), 之后对照这student表和score表的设计创建,代码如下: (2)按照表10.5和10.6的内容为student表和score表增加记录 本来想偷点懒的,突然遇到这种问题,也是醉了.等我把数据导入进去的时候才恍然大悟,失了智, 中英文的单引号我留意,逗号反而忘了切换,由此可见,经验是得积累的,遇到问题漠慌,解决问题的途径

《MySQL入门很简单》练习6.5

第一步:win+R输入cmd,打开命令行窗口输入mysql -h 127.0.0.1 -u root -p 第二步:查看数据库中是否存在example数据库若存在则先备份再删除,之后创建数据库,输入CREATE DATABASE example; 在SHOW DATABASES;来确认数据库是否创建成功.- 第三步:创建student和grade两张表,首先USE example;来选中example数据库, 对照这需要设计的两张表来输入对应的sql语句 创建表很容易遗漏条件所以得细心的审核,上

MySQL入门很简单: 2 MySQL数据类型

2. MySQL数据类型 2.1 整数类型 后面的是默认显示宽度: tinyint(4) smallint(6) mediumint(9) int(11) bigint(20) 2.2 浮点型和定点数类型 MySQL可以指定浮点数和定点数的精度:    数据类型(M,D)  M:数据总长度, D:小数点后的长度

《MySQL入门很简单》练习6.6

(1)首先创建数据库school (2)创建teacher表 选中数据库 (3)将teacher表的name字段的数据类型改为VARCHAR(30) (4)将birthday字段的位置改到sex字段的前面 (5)将num字段改名为t_id MySQL中默认是可以为空的,在更改字段名称时要是不写完整性约束就会默认值为NULL (6)将teacher表的address字段删除 (7)在teacher表中增加名为wages的字段,数据类型为FLOAT (8)将teacher表改名为teacherInf

《MySQL入门很简单》练习7.4

(1):查看MySQL中是否存在job数据库 (2)将user表的存储引擎变为i额MyISAM 由于时间匆忙直接看着表就敲SQL语句了,现在看着题目要求慢慢改一下吧 在userid字段上创建名为index_uid的唯一性索引,并且以降序的形式排列 在username和passwd字段上创建名为index_user的多列索引 在info字段上创建名为index_info的全文索引 这几张图片有点长,我是抽空在做的:)作为初学者建议还是多敲SQL语句,只有这样才能做到熟能生巧,但是大神除外. (3)

MySQL入门很简单: 15 java访问MySQL数据库

1. 连接数据库 1.1 下载安装驱动 java通过JDBC(Java Database Connectivity,Java数据库连接)来访问MySQL数据库.JDBC的编程接口提供的接口和类与MySQL数据库建立连接,然后将SQL语句的执行结果进行处理. 1)下载MySQL Connector/J驱动 http://dev.mysql.com/downloads/file/?id=460363 2)MyEclipse导入JDBC驱动 Window|Perference  Path|User L

MySQL入门很简单: 13 数据备份和还原

1. 数据备份 1)使用mysqldump命令备份 第一种:备份一个数据库 mysqldump -u username -p dbname table1 table2 ... > BackupName.sql 注: dbname表示数据库的名称: table1和table2表的名称 ,不加该参数备份整个数据库: BackupName.sql备份系统的名称 第二种:备份多个数据库 mysqldump -u username -p --databases dbname1 dbname2 ... >

MySQL入门很简单: 12 MYSQL 用户管理

1. 权限表 安装MySQL会自动安装一个名为mysql的数据库,存储权限表: user表, db表,host表,table_priv表,columns_priv表,proc_priv表等. 1)user表 :39个字段,分为四类——用户列,权限列,安全列,资源控制列 用户列: Host, User,Password, 这三个字段决定用户能否登陆: 权限列:以priv结尾的字段, 决定用户的权限: 安全列: 资源控制列: 2.账户管理 1)用户登录和退出 mysql -h hostname|ho

MySQL入门很简单-触发器

1.触发器是由事件来触发某个操作,这些事件包括insert语句.update语句和delete语句.当数据库系统执行这些事件时,会激活触发器执行相应操作.MySQL从5.0.2开始支持触发器.使用触发器可以保证某些操作之间的一致性. 2.创建一个执行语句的触发器 create trigger 触发器名 before|after 触发事件 on 表名 for each row 执行语句; before和after参数指定触发器执行的时间; 触发事件包括insert.update和delete; f

MySQL入门很简单: 8查询数据

1. 查询语句语法 SELECT 属性列表 FROM 表名和视图列表 [WHERE 条件表达式1] [GROUP BY 属性名1 [HAVING t条件表达式2]] [ORDER BY 属性名2 [ASC| DESC] ] 2. 在单表上查询数据 1)查询所有字段 第一种方法:列出表的所有字段 SELECT num, name, age, sex FROM employee; 第二种方法:使用*查询所有字段 SELECT * FROM 表名 2)查询指定字段 //结果字段与SELECT语句中字段