(Ebook) Programming Computer Vision with Python: Tools and algorithms for analyzing images by Jan Erik Solem ISBN 9781449316549, 1449316549 - Read the ebook online or download it as you prefer
(Ebook) Programming Computer Vision with Python: Tools and algorithms for analyzing images by Jan Erik Solem ISBN 9781449316549, 1449316549 - Read the ebook online or download it as you prefer
https://ebooknice.com/product/opencv-3-computer-vision-with-python-
cookbook-leverage-the-power-of-opencv-3-and-python-to-build-computer-
vision-applications-10447758
https://ebooknice.com/product/opencv-computer-vision-with-
python-55662098
https://ebooknice.com/product/opencv-with-python-blueprints-design-
and-develop-advanced-computer-vision-projects-using-opencv-with-
python-20640218
(Ebook) Parallel Programming with Python by Jan Palach ISBN
9781783288397, 1783288396
https://ebooknice.com/product/parallel-programming-with-python-5030408
https://ebooknice.com/product/hacking-secret-ciphers-with-python-a-
beginner-s-guide-to-cryptography-and-computer-programming-with-
python-4449906
https://ebooknice.com/product/learning-opencv-3-computer-vision-with-
python-7295256
https://ebooknice.com/product/computer-vision-algorithms-and-
applications-37249542
https://ebooknice.com/product/numerical-algorithms-methods-for-
computer-vision-machine-learning-and-graphics-5239520
Programming Computer Vision
with Python
Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472.
O’Reilly books may be purchased for educational, business, or sales promotional use. Online
editions are also available for most titles (http://my.safaribooksonline.com). For more information,
contact our corporate/institutional sales department: (800) 998-9938 or [email protected].
Interior designer: David Futato Project manager: Paul C. Anagnostopoulos
Cover designer: Karen Montgomery Copyeditor: Priscilla Stevens
Editors: Andy Oram, Mike Hendrickson Proofreader: Richard Camp
Production editor: Holly Bauer Illustrator: Laurel Muller
Nutshell Handbook, the Nutshell Handbook logo, and the O’Reilly logo are registered trademarks
of O’Reilly Media, Inc. Programming Computer Vision with Python, the image of a bullhead fish,
and related trade dress are trademarks of O’Reilly Media, Inc.
Many of the designations used by manufacturers and sellers to distinguish their products are
claimed as trademarks. Where those designations appear in this book, and O’Reilly Media, Inc.,
was aware of a trademark claim, the designations have been printed in caps or initial caps.
While every precaution has been taken in the preparation of this book, the publisher and authors
assume no responsibility for errors or omissions, or for damages resulting from the use of the
information contained herein.
ISBN: 978-1-449-31654-9
[M]
Table of Contents
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii
iii
5. Multiple View Geometry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
5.1 Epipolar Geometry 99
5.2 Computing with Cameras and 3D Structure 107
5.3 Multiple View Reconstruction 113
5.4 Stereo Images 120
Exercises 125
iv | Table of Contents
A. Installing Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
A.1 NumPy and SciPy 227
A.2 Matplotlib 228
A.3 PIL 228
A.4 LibSVM 228
A.5 OpenCV 229
A.6 VLFeat 230
A.7 PyGame 230
A.8 PyOpenGL 230
A.9 Pydot 230
A.10 Python-graph 231
A.11 Simplejson 231
A.12 PySQLite 232
A.13 CherryPy 232
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Table of Contents | v
Preface
Today, images and video are everywhere. Online photo-sharing sites and social net-
works have them in the billions. Search engines will produce images of just about any
conceivable query. Practically all phones and computers come with built-in cameras.
It is not uncommon for people to have many gigabytes of photos and videos on their
devices.
Programming a computer and designing algorithms for understanding what is in these
images is the field of computer vision. Computer vision powers applications like image
search, robot navigation, medical image analysis, photo management, and many more.
The idea behind this book is to give an easily accessible entry point to hands-on
computer vision with enough understanding of the underlying theory and algorithms
to be a foundation for students, researchers, and enthusiasts. The Python programming
language, the language choice of this book, comes with many freely available, powerful
modules for handling images, mathematical computing, and data mining.
When writing this book, I have used the following principles as a guideline. The book
should:
.
Be written in an exploratory style and encourage readers to follow the examples on
their computers as they are reading the text.
.
Promote and use free and open software with a low learning threshold. Python was
the obvious choice.
.
Be complete and self-contained. This book does not cover all of computer vision
but rather it should be complete in that all code is presented and explained. The
reader should be able to reproduce the examples and build upon them directly.
.
Be broad rather than detailed, inspiring and motivational rather than theoretical.
vii
Prerequisites and Overview
This book looks at theory and algorithms for a wide range of applications and problems.
Here is a short summary of what to expect.
Chapter Overview
Chapter 1, “Basic Image Handling and Processing”
Introduces the basic tools for working with images and the central Python modules
used in the book. This chapter also covers many fundamental examples needed for
the remaining chapters.
Chapter 2, “Local Image Descriptors”
Explains methods for detecting interest points in images and how to use them to
find corresponding points and regions between images.
Chapter 3, “Image to Image Mappings”
Describes basic transformations between images and methods for computing them.
Examples range from image warping to creating panoramas.
Chapter 4, “Camera Models and Augmented Reality”
Introduces how to model cameras, generate image projections from 3D space to
image features, and estimate the camera viewpoint.
Chapter 5, “Multiple View Geometry”
Explains how to work with several images of the same scene, the fundamentals of
multiple-view geometry, and how to compute 3D reconstructions from images.
viii | Preface
Chapter 6, “Clustering Images”
Introduces a number of clustering methods and shows how to use them for group-
ing and organizing images based on similarity or content.
Chapter 7, “Searching Images”
Shows how to build efficient image retrieval techniques that can store image rep-
resentations and search for images based on their visual content.
Chapter 8, “Classifying Image Content”
Describes algorithms for classifying image content and how to use them to recog-
nize objects in images.
Chapter 9, “Image Segmentation”
Introduces different techniques for dividing an image into meaningful regions
using clustering, user interactions, or image models.
Chapter 10, “OpenCV”
Shows how to use the Python interface for the commonly used OpenCV computer
vision library and how to work with video and camera input.
There is also a bibliography at the back of the book. Citations of bibliographic entries
are made by number in square brackets, as in [20].
1 These examples produce new images and are more image processing than actually extracting information from
images.
Preface | ix
and compact syntax, that take getting used to. The code examples assume you have
Python 2.6 or later, as most packages are only available for these versions. The upcom-
ing Python 3.x version has many language differences and is not backward compatible
with Python 2.x or compatible with the ecosystem of packages we need (yet).
Some familiarity with basic Python will make the material more accessible for read-
ers. For beginners to Python, Mark Lutz’ book Learning Python [20] and the online
documentation at http://www.python.org/ are good starting points.
When programming computer vision, we need representations of vectors and matrices
and operations on them. This is handled by Python’s NumPy module, where both vectors
and matrices are represented by the array type. This is also the representation we will
use for images. A good NumPy reference is Travis Oliphant’s free book Guide to NumPy
[24]. The documentation at http://numpy.scipy.org/ is also a good starting point if you
are new to NumPy. For visualizing results, we will use the Matplotlib module, and for
more advanced mathematics, we will use SciPy. These are the central packages you will
need and will be explained and introduced in Chapter 1.
Besides these central packages, there will be many other free Python packages used
for specific purposes like reading JSON or XML, loading and saving data, generating
graphs, graphics programming, web demos, classifiers, and many more. These are
usually only needed for specific applications or demos and can be skipped if you are
not interested in that particular application.
It is worth mentioning IPython, an interactive Python shell that makes debugging
and experimentation easier. Documentation and downloads are available at
http://ipython.org/.
x | Preface
Mathematical formulas are given inline like this f (x) = wT x + b or centered indepen-
dently:
f (x) = wi x i + b
i
How to Contact Us
Please address comments and questions concerning this book to the publisher:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
(800) 998-9938 (in the United States or Canada)
(707) 829-0515 (international or local)
(707) 829-0104 (fax)
We have a web page for this book, where we list errata, examples, links to the code and
data sets used, and any additional information. You can access this page at:
oreil.ly/comp_vision_w_python
To comment or ask technical questions about this book, send email to:
[email protected]
Preface | xi
For more information about our books, courses, conferences, and news, see our website
at http://www.oreilly.com.
Find us on Facebook: http://facebook.com/oreilly
Follow us on Twitter: http://twitter.com/oreillymedia
Watch us on YouTube: http://www.youtube.com/oreillymedia
Acknowledgments
I’d like to express my gratitude to everyone involved in the development and production
of this book. The whole O’Reilly team has been helpful. Special thanks to Andy Oram
(O’Reilly) for editing, and Paul Anagnostopoulos (Windfall Software) for efficient
production work.
Many people commented on the various drafts of this book as I shared them online.
Klas Josephson and Håkan Ardö deserve lots of praise for their thorough comments and
feedback. Fredrik Kahl and Pau Gargallo helped with fact checks. Thank you all readers
for encouraging words and for making the text and code examples better. Receiving
emails from strangers sharing their thoughts on the drafts was a great motivator.
Finally, I’d like to thank my friends and family for support and understanding when I
spent nights and weekends on writing. Most thanks of all to my wife Sara, my long-time
supporter.
xii | Preface
CHAPTER 1
Basic Image Handling
and Processing
pil_im = Image.open('empire.jpg')
Here are some examples taken from the PIL documentation, available at http://www
.pythonware.com/library/pil/handbook/index.htm. Output from the examples is shown
in Figure 1-1.
1
Figure 1-1. Examples of processing images with PIL.
The PIL function open() creates a PIL image object and the save() method saves the
image to a file with the given filename. The new filename will be the same as the original
with the file ending “.jpg” instead. PIL is smart enough to determine the image format
from the file extension. There is a simple check that the file is not already a JPEG file
and a message is printed to the console if the conversion fails.
Throughout this book we are going to need lists of images to process. Here’s how you
could create a list of filenames of all images in a folder. Create a file called imtools.py to
store some of these generally useful routines and add the following function:
import os
def get_imlist(path):
""" Returns a list of filenames for
all jpg images in a directory. """
Create Thumbnails
Using PIL to create thumbnails is very simple. The thumbnail() method takes a tuple
specifying the new size and converts the image to a thumbnail image with size that fits
The region is defined by a 4-tuple, where coordinates are (left, upper, right, lower). PIL
uses a coordinate system with (0, 0) in the upper left corner. The extracted region can,
for example, be rotated and then put back using the paste() method like this:
region = region.transpose(Image.ROTATE_180)
pil_im.paste(region,box)
Some examples are shown in Figure 1-1. The leftmost image is the original, followed
by a grayscale version, a rotated crop pasted in, and a thumbnail image.
1.2 Matplotlib
When working with mathematics and plotting graphs or drawing points, lines, and
curves on images, Matplotlib is a good graphics library with much more powerful
features than the plotting available in PIL. Matplotlib produces high-quality figures
like many of the illustrations used in this book. Matplotlib’s PyLab interface is the
set of functions that allows the user to create plots. Matplotlib is open source and
available freely from http://matplotlib.sourceforge.net/, where detailed documentation
and tutorials are available. Here are some examples showing most of the functions we
will need in this book.
1.2 Matplotlib | 3
from PIL import Image
from pylab import *
# some points
x = [100,100,400,400]
y = [200,500,200,500]
This plots the image, then four points with red star markers at the x and y coordinates
given by the x and y lists, and finally draws a line (blue by default) between the two
first points in these lists. Figure 1-2 shows the result. The show() command starts the
figure GUI and raises the figure windows. This GUI loop blocks your scripts and they
are paused until the last figure window is closed. You should call show() only once per
script, usually at the end. Note that PyLab uses a coordinate origin at the top left corner
as is common for images. The axes are useful for debugging, but if you want a prettier
plot, add:
axis('off')
This will give a plot like the one on the right in Figure 1-2 instead.
There are many options for formatting color and styles when plotting. The most useful
are the short commands shown in Tables 1-1, 1-2 and 1-3. Use them like this:
Table 1-1. Basic color formatting commands for plotting with PyLab.
Color
'b' blue
'g' green
'r' red
'c' cyan
'm' magenta
'y' yellow
'k' black
'w' white
Table 1-2. Basic line style formatting commands for plotting with PyLab.
Line style
'-' solid
'- -' dashed
':' dotted
Table 1-3. Basic plot marker formatting commands for plotting with PyLab.
Marker
'.' point
'o' circle
's' square
'*' star
'+' plus
'x' x
1.2 Matplotlib | 5
useful. This needs grayscale images, because the contours need to be taken on a single
value for every coordinate [x , y]. Here’s how to do it:
figure()
hist(im.flatten(),128)
show()
The second argument specifies the number of bins to use. Note that the image needs to
be flattened first, because hist() takes a one-dimensional array as input. The method
flatten() converts any array to a one-dimensional array with values taken row-wise.
Figure 1-3 shows the contour and histogram plot.
Figure 1-3. Examples of visualizing image contours and plotting image histograms with Matplotlib.
It was with the greatest surprise that Eugene Mallard received the
message that Nora delivered—that Ida was too ill to attend the
grand ball with him.
"She did not seem to be ill this afternoon," he said to himself.
Obeying a sudden impulse, he hurried from the room, intent upon
going to Ida's boudoir and offering her his sympathy; but, on second
thought, he concluded that in all probability she would not care to
be disturbed.
He felt grievously disappointed. He knew that many of his friends
would be present; and besides, what could he say to Mrs. Staples
and her daughters?
Some of her friends had left Ida apparently in the best of health and
spirits at noon. How could he account to them for her sudden
indisposition?
During the forenoon he saw that there was something on Ida's
mind; that she was greatly troubled.
Perhaps the words he had said to her only a short time before had
much to do with her indisposition. He felt that he ought to have a
talk with Ida. If he were to reassure her that she could have
everything her own way, she might feel much relieved.
A second time he started for her boudoir; but again he drew back.
He could not tell what prompted him to do so.
"Such strange, contradictory emotions seem to possess me," he said.
"I will go out into the grounds and smoke a cigar. That will quiet me
a little, and afterward I will have a talk with Ida."
Eugene Mallard wandered about the grounds for half an hour or
more. He heard a clock strike the hour of eight.
How dark and gloomy it was! There was no moon, but the stars
shed a faint, glimmering light.
He had smoked a cigar; but still he paced aimlessly up and down the
grounds, lost in thought.
He came to one of the garden benches. It looked so inviting that he
threw himself down upon it.
How long he sat there he never knew. Presently he was disturbed by
the sound of slow, cautious footsteps. It could not be one of the
servants stealing through the grounds in that manner. It must be
some poacher.
He drew back into the shadow of the trees, and watched with no
little curiosity. He had been so kind to the villagers that he felt
surprised at this apparent ingratitude.
Presently a figure came down the path. The more he watched the
figure the more certain he became that he had seen it before. Its
every move seemed familiar to him.
Suddenly a thought flashed into his mind that made him hold his
breath.
"Great Heavens! can it be Arthur Hollis?" he ejaculated.
His face paled; great flashes of fire seemed to come from his eyes.
The very blood in his veins seemed to stagnate. Faint and dizzy, he
leaned back against the trunk of a tree.
Great God! what could it mean? His wife supposed him to be by this
time on his way to the ball. During his absence would she meet,
dared she meet Arthur Hollis?
The tall, familiar-looking figure paced impatiently by the brook-side
under the dim light of the stars. Yes, the man was there waiting for
some one.
From where he stood he could plainly see a faint light in the window
of his wife's room, and as his eyes were fixed upon it, the light was
extinguished.
If a sword had been plunged into Eugene Mallard's heart, it could
not have given him a greater shock.
Many a night he had paced up and down the grounds, watching the
light in that window. Then it had never been put out before ten.
Why should it be extinguished so early to-night?
The thought troubled Eugene Mallard, as he turned his head and
saw the figure still pacing restlessly up and down by the brook.
He dared not utter a word. He would await developments. He
scarcely breathed, in his suspense. It seemed to him that the blood
in his veins was turned to ice.
He took up a position where there was no possible danger of being
observed, and there he watched and waited.
Up in her boudoir Ida was donning with trembling hands, the long
cloak that was to disguise her.
She had sent Nora from her room. But it seemed to her that the girl
looked back suspiciously as she went out and closed the door after
her.
"Heaven help me to get through with this exciting scene!" Ida
muttered.
Her heart was throbbing so, her limbs were so weak, that she was
obliged to sit down for a minute.
"Oh, Heaven help me! How thankful I am that Eugene did not send
for me before he left for the ball. He has reached there by this
time!" she muttered.
She looked at the clock, and said to herself that time was flying, and
she must hasten to keep her appointment.
Again she counted over the money which Eugene had given her—the
money that was to restore her little child to her—the money that
was to purchase her freedom and end forever Royal Ainsley's
persecutions.
"What would Eugene say if he knew all?" she asked herself, in great
trepidation.
She trembled even at the thought of it.
Was she doing right in concealing the truth from Eugene Mallard?
She sprung from her chair and paced hurriedly up and down the
room.
If Eugene knew all, he would certainly tell her that her path lay with
Royal Ainsley, that his roof would shelter her no more. And now she
could not part from him. Every fiber of her heart was woven about
him.
She tried to look into the future; but, think what she would, the
pictures presented frightened her.
Presently she paused before the window. Was it only her fancy, or
did she hear the patter of rain-drops?
She turned out the light and threw open the window. She felt
relieved to find that it was only the leaves that were tapping against
the window-pane. She closed the window, with a sigh, and opened
the door softly.
The corridor was empty; the gas-jets of the great chandelier were
turned low. Like a thief in the night, she stole noiselessly down the
winding passageway.
The sound of laughter from the servants' hall below floated up to her
through the awful stillness.
What if one of the doors on either side should open, and some one
step out and confront her?
She drew her long cloak closely about her, and pulled the hood down
over her head.
There was a side door opening on to a porch, and leading directly
into the grounds.
Ida hurried toward this door and opened it cautiously. For a moment
she stood on the threshold, and in that moment a gust of wind blew
the cloak from about her shoulders, and it fell at her feet.
The light from the hall lamp clearly revealed her form to Eugene
Mallard, who stood leaning against an oak-tree scarcely one hundred
feet distant.
"It is Ida!" he muttered, hoarsely.
She turned her steps down toward the brook, as he had feared she
would do.
"She stayed away from the ball to meet that scoundrel!" he
muttered under his breath.
With hesitating steps, little dreaming of what the end of her
adventure would be, Ida hurried on to her doom.
The wind sighed a mournful requiem in the trees, the songs of the
birds were hushed, and the sweet murmur of the brook seemed to
end in a sob as it rushed onward to the sea.
The night was warm, but a great shiver crept over Ida as she turned
out of the path and hurried along through the garden by a short cut
to the place where she knew Royal Ainsley was impatiently waiting
for her.
CHAPTER LVII.
Royal Ainsley was not a man to be trusted when under the influence
of drink. As the minutes went by, and Ida did not come, he was
beside himself with rage.
"What does she mean by keeping me waiting in this manner?" he
roared. "By the Lord Harry, I'll make her pay for this!"
Then, like Eugene Mallard, who was watching but a few feet from
him, he saw the light go out in Ida's room.
"That must be her room. She is coming at last," he murmured.
He braced himself against the trunk of a tree, for by this time his
limbs were none too steady under him.
When the door opened, and he saw Ida approach, an exclamation of
satisfaction broke from his lips.
He sat down upon the mossy rock and watched the slim figure as it
moved slowly over the greensward.
"She is certainly in no hurry to see me," he muttered, with a grim
smile. "But I'll change all that."
Meanwhile, Ida had stopped short, and was standing motionless in
the path.
Putting her hand into the pocket of her dress, the girl found, to her
great amazement, that she had come away without the roll of bills
she had intended to bring with her. In her excitement she had left
the money on the table.
What should she do? There was no course to pursue but go back for
it.
Then a superstitious terror for which she could not account seemed
to seize her.
"It will surely be a bad omen to return to the house." she told
herself; "and yet I dare not meet Royal Ainsley without the money.
He will say that my story about forgetting the money is only an
excuse."
CHAPTER LVIII.
When Royal Ainsley shook himself free from old Joe's detaining
grasp, his first impulse was to get as far away from the place as
possible.
With second thoughts, however, came another decision. No; he must
learn all that was taking place.
Quickly circling the grounds, he soon gained a vantage-place behind
a group of bushes not far from the house. There he could easily see
and hear all that transpired without being seen himself.
He saw Eugene Mallard as he drew the girl beneath the swinging
lamp in the hall, and heard the conversation that passed between
them.
"So!" he muttered, grinding his white teeth savagely, "the girl is my
lady's maid, eh? I dare say, she sent her with some message to me
when she was intercepted by Eugene Mallard. But Ida will find that
this will not work with me. See her I shall, if I have to stay in these
grounds till broad daylight."
He watched and waited until he saw even old Joe relax his vigilance
and go into the house.
Royal Ainsley waited there until the old mansion was wrapped in
gloom and darkness, then he slipped from his hiding-place, passed
noiselessly over the graveled walk, and stood beneath Ida's window.
Stooping, he caught up a handful of pebbles. One by one he flung
them up against the window-pane. Just as he had expected, he saw
a white, terrified face appear at the window, and two white hands
threw up the sash.
He saw at once that it was Ida. He moved out from the shadow of
the trees. She saw him at once, and recognized him.
"Is it you?" she cried, in the greatest alarm. "What in Heaven's name
are you doing there, pray?"
"Your common sense ought to tell you that;" he retorted, harshly.
"Come down here at once, I tell you, and be sure to bring that
money with you!"
"Oh, no! no! I can not!" she answered him, piteously.
"Why?" he demanded, with something very much like an imprecation
upon his lips.
"I dropped the money in the dining-room as I was passing through it
to get out into the grounds. The room is locked; I can not get it until
to-morrow morning. Old Joe always carries the key with him."
"It is a lie!" he cried, fiercely.
"No! no! On my life, it is true!" she answered, with a piteous quiver
in her voice; adding: "I was hurrying through the room, and there I
must have dropped it. I searched for it in every other place."
"Then hear what I say," he retorted, with an oath, "in these very
grounds I shall stay until you come to me. I know well that old Joe is
astir at dawn. You must be up then, find the money which you say
you dropped, and bring it out to me. I will be waiting for you at the
same place."
Before she could utter a word of protest, he had turned and
disappeared in the darkness.
All night long Ida Mallard paced the floor of her room, scarcely
heeding the hours that dragged their slow lengths by. Dawn came
before she realized it. She was startled from her reverie by hearing
old Joe throwing open the shutters about the house. That recalled
her to a realization of passing events.
Joe had unlocked the door of the dining-room at last, but his sight
was so poor that he could not espy a small roll of bills lying on the
floor.
Ida, gliding into the room as soon as his footsteps echoed down the
corridor, found the package.
She stole to the door as soon as it was unlocked.
Ah! how sweet and fragrant was the early morning. How cool and
green the grass looked, wet with the morning dew! Little she
dreamed that ere the day waned that same grass would be dyed
with a human being's blood.
She shivered as she stepped forth into the grounds. With hurried
steps she crossed the lawn, and went into the rose-garden beyond.
There she saw Royal Ainsley. He was pacing the little path by the
brook, his face white, his eyes angry-looking, downcast and sullen.
"So you have come at last, eh?" he exclaimed, angrily.
"I am here," she responded, tremulously.
"I was just about to go and wake up the household," he cried, his
rage increasing.
"Now, that I am here, you will not have to do that," she answered,
wearily.
"Where is the money?" he asked, abruptly.
She held it in her hand, but clutched it more tightly.
"I have it with me," she responded; "but it is not yours until you
carry out your promises!"
He looked at her with a cunning gleam in his eyes.
"To be sure I will carry out my agreement," he said.
"But I must have proof that you will do so before I part with so
much money," she said. "You must give me your written word that
you will never trouble me again. You must also tell me where I can
find my child, for I see that you have not kept your word about
bringing her with you!"
He laughed aloud—a harsh, mocking laugh.
"I am not surprised at hearing a remark like that from your lips. A
woman who could abandon her child as easily as you did, without so
much as knowing its fate, and who is content to live here as Eugene
Mallard's wife, whenever he is ready to take you to his heart, is
capable of doing anything. I do not wonder that you supposed the
little one was here in the grounds all night long awaiting your fancy
to appear!"
She recoiled at the words as though he had struck her a blow.
"Let me tell you where your child is," he said, hoarsely. "You shall
know its fate!"
As he spoke, he seized the hand that held the money, and tore the
bills from her grasp.
CHAPTER LX.
THE END.
THE A. and L. SERIES
POPULAR CLOTH
BOUND BOOKS
Issued ONLY by
THE ARTHUR WESTBROOK COMPANY
GUY BOOTHBY
H. RIDER HAGGARD
Cleopatra
King Solomon's Mines
She
The Witches' Head
The World's Desire
LOUIS TRACY
FRED M. WHITE
J. PHILLIPS OPPENHEIM
MAX PEMBERTON
F. DU BOISGOBEY
MARIE CORELLI
Vendetta
A Romance of Two Worlds
CHARLES GARVICE
AUGUSTA EVANS
St. Elmo
Inez
MRS. SOUTHWORTH
Ishmael
Self-Raised
The Missing Bride
India
CHARLOTTE M. BRAEME
TRANSCRIBER'S NOTE:
Obvious printer errors have been corrected. Otherwise, the author's original spelling,
punctuation and hyphenation have been left intact.
The cover image was restored by the transcriber and is placed in the public domain.
*** END OF THE PROJECT GUTENBERG EBOOK A DANGEROUS
FLIRTATION; OR, DID IDA MAY SIN? ***
1.D. The copyright laws of the place where you are located also
govern what you can do with this work. Copyright laws in most
countries are in a constant state of change. If you are outside
the United States, check the laws of your country in addition to
the terms of this agreement before downloading, copying,
displaying, performing, distributing or creating derivative works
based on this work or any other Project Gutenberg™ work. The
Foundation makes no representations concerning the copyright
status of any work in any country other than the United States.
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
ebooknice.com