//Exercises at end of Chapter 5,《learning OpenCV3》
#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
void help(const char **argv) {
    cout << "\n\n"
        << "This program solves the Exercises at the end of Chapter 5 \n"
        << "Call:\n"
        << argv[0] << " <path/image_name>\n\n"
        << "For example: " << argv[0] << " / test.jpg\n"
        << endl;
}
int main( int argc, const char** argv )
{
    help(argv);
    if(argc < 2) {
        cout << "\nERROR: You had too few parameters.\n" << endl;
        return -1;
    }
    /************************************************************************/
    /*5.1. Drawing practice: load or create and display a color image. Draw one example of
    every shape and line that OpenCV can draw.                           */
    /************************************************************************/
    Mat src = imread("e:/template/lena.jpg");
    cv::circle(src,Point(100,100),100,Scalar(255,255,255),2); //circle
    cv::rectangle(src,Point(0,0),Point(300,300),Scalar(255,255,255),2);//rectangle
    cv::line(src,Point(0,0),Point(300,300),Scalar(255,255,255),2);//line
    cv::ellipse(src,cv::Point(100,100),Size(100,100),45,0,180,Scalar(255,0,0),2);//ellipse
    /************************************************************************/
    /*5.2. Grayscale: load and display a color image.
    a. Turn it into three-channel grayscale (it is still an BGR image, but it looks gray
    to the user).   
    b. Draw color text onto the image.*/
    /************************************************************************/
    //a
    Mat tmp;
    cvtColor(src,tmp,COLOR_BGR2GRAY);
    cvtColor(tmp,src,COLOR_GRAY2BGR);
    //b
    putText(src,"puttext",Point(50,30),CV_FONT_HERSHEY_DUPLEX,1.0f,Scalar(0,255,0));
    /************************************************************************/
    /*5.5. Use cv::LineIterator to count pixels on different line segments in, say, a 300 × 300 image.
    a. At what angles do you get the same number of pixels for 4-connected and
    8-connected lines?
    b. For line segment angles other than the above, which counts more pixels:
    4-connected or 8-connected lines?
    c. For a given line segment, explain the difference in the length of the line compared 
    to the number of pixels you count iterating along the line for
    both 4-connected and 8-connected? Which connectedness is closer to the true
    line length?
    /************************************************************************/
    //a、
    LineIterator it_4_x(src, Point(0,0), Point(0,100), 4);
    LineIterator it_8_x(src, Point(0,0), Point(0,100), 4);
    LineIterator it_4_y(src, Point(0,0), Point(100,0), 4);
    LineIterator it_8_y(src, Point(0,0), Point(100,0), 4);
    cout << "it_4_x " <<it_4_x.count<<" it_8_x "<<it_8_x.count<<endl;
    cout << "it_4_y " <<it_4_y.count<<" it_8_y "<<it_8_y.count<<endl;
    //b the answer is: 4-connected counts more pixels than 8-connected counts
    LineIterator it_4(src, Point(0,0), Point(100,100), 4);
    LineIterator it_8(src, Point(0,0), Point(100,100), 8);
    cout << "it_4 " <<it_4.count<<" large than it_8 "<<it_8.count<<endl;
    //c 
    // the difference is the same as the difference between 4-connected and 8-connected
    // I veleve the 8-connected is closer to the true line length. 
    waitKey();
    return 0;
}

《学习OpenCV3》第6章课后习题的更多相关文章

  1. 20145330《Java学习笔记》第一章课后练习8知识总结以及IDEA初次尝试

    20145330<Java学习笔记>第一章课后练习8知识总结以及IDEA初次尝试 题目: 如果C:\workspace\Hello\src中有Main.java如下: package cc ...

  2. 视觉slam十四讲第七章课后习题6

    版权声明:本文为博主原创文章,转载请注明出处: http://www.cnblogs.com/newneul/p/8545450.html 6.在PnP优化中,将第一个相机的观测也考虑进来,程序应如何 ...

  3. 视觉slam十四讲第七章课后习题7

    版权声明:本文为博主原创文章,转载请注明出处:http://www.cnblogs.com/newneul/p/8544369.html  7.题目要求:在ICP程序中,将空间点也作为优化变量考虑进来 ...

  4. 关于《Java读书笔记》第六章课后习题选择题总结与疑问

    课后习题 选择题 3 题 代码: class Some{ String ToString(){ return "Some instance"; } } public class M ...

  5. C语言程序设计·谭浩强(第四版)第二章课后习题的答案,算法——程序的灵魂

    C语言程序小练习 1.用C语言设计程序算出1-1/2+1/3-14+1/5...+1/99-1/100的值 #include<stdio.h> int main() { ; double ...

  6. 视觉slam十四讲第8章课后习题3+稀疏直接法程序注释

    版权声明:本文为博主原创文章,转载请注明出处: http://www.cnblogs.com/newneul/p/8571653.html 3.题目回顾:在稀疏直接法中,假设单个像素周围小块的光度也不 ...

  7. 《学习OpenCV3》第14章课后习题

    1.在一条含有 N 个点的封闭轮廓中,我们可以通过比较每个点与其它点的距离,找出最外层的点.(这个翻译有问题,而且这个问题是实际问题) a.这样一个算法的复杂度是多少? b.怎样用更快的速度完成这个任 ...

  8. Perl 中级教程 第5章课后习题

    5. 9. 1. 练习1 [5 分钟] 先不要运行程序, 看看你能否判断出这程序的哪部份出了问题?如果你看不出 来, 就可以运行一相程序, 得到些暗示, 来看是否能修改好: my %passenger ...

  9. 中级Perl 第三章课后习题

    3. 10. 1. 练习1 [25 分钟] 读当前目录的文件列表并转换成全路径.不能用shell 命令或外部程序读当前目 录.Perl 的File::Spec 和Cwd 两个模块对这个程序有帮助.每个 ...

随机推荐

  1. java 运行时异常与非运行时异常理解

    参考:https://blog.csdn.net/lan12334321234/article/details/70049446 所谓的异常就是阻止当前程序或方法继续执行的问题 java异常分为两种: ...

  2. NewWord

    identification: 鉴定,识别; 验明; 身份证明; 认同; peer:PEER-TO-PEER:同等延迟机制.根据网络中共享资源方式的不同,局域网有两种组织形式 filters: n. ...

  3. hiho #1014 : Trie树(模板)

    Trie树 [题目链接]Trie树 &题意: 输入 输入的第一行为一个正整数n,表示词典的大小,其后n行,每一行一个单词(不保证是英文单词,也有可能是火星文单词哦),单词由不超过10个的小写英 ...

  4. HDU 3117 Fibonacci Numbers(矩阵)

    Fibonacci Numbers [题目链接]Fibonacci Numbers [题目类型]矩阵 &题解: 后4位是矩阵快速幂求,前4位是用log加Fibonacci通项公式求,详见上一篇 ...

  5. JavaScript原型继承的实例

    // 创建构造函数实例(获取DOM节点) <div id="app">测试字符</div>

  6. es6proxy

    Proxy 支持的拦截操作一览. 对于可以设置.但没有设置拦截的操作,则直接落在目标对象上,按照原先的方式产生结果. (1)get(target, propKey, receiver) 拦截对象属性的 ...

  7. 在Windows10中运行debug程序

    下载debug.exe 下载DOSBox 安装DOXBox,尽量不要装在C盘 将debug.exe放到F:/TASM 运行DOSBox.exe,执行 mount c f:\TASM #挂载目录 c: ...

  8. 100.容器List-ArrayList

    package collection; import java.util.ArrayList; import java.util.Collection; import java.util.Date; ...

  9. CAT Caterpillar ET is really a exceptional obd2 solution

    As a excellent obd2 solutions,Heavy Duty Diagnostic CAT Caterpillar ET Diagnostic Adapter features a ...

  10. Hadoop学习笔记之一:Hadoop IPC

    因为某些原因需要把前一段时间对Hadoop(版本基于0.20.2)的学习积累搬到这里,成为一个系列.写得会很简单,只为必要时给自己提醒. IPC框架 所有Hadoop协议接口的实现都依赖Hadoop ...