minor grammar edits

This commit is contained in:
Scott Noyes 2021-07-22 14:58:20 -05:00
parent b42152ffeb
commit a76274b549

View File

@ -84,8 +84,8 @@ a new header with the new boundaries:
Mat D (A, Rect(10, 10, 100, 100) ); // using a rectangle Mat D (A, Rect(10, 10, 100, 100) ); // using a rectangle
Mat E = A(Range::all(), Range(1,3)); // using row and column boundaries Mat E = A(Range::all(), Range(1,3)); // using row and column boundaries
@endcode @endcode
Now you may ask -- if the matrix itself may belong to multiple *Mat* objects who takes responsibility Now you may ask -- if the matrix itself may belong to multiple *Mat* objects, who takes responsibility
for cleaning it up when it's no longer needed. The short answer is: the last object that used it. for cleaning it up when it's no longer needed? The short answer is: the last object that used it.
This is handled by using a reference counting mechanism. Whenever somebody copies a header of a This is handled by using a reference counting mechanism. Whenever somebody copies a header of a
*Mat* object, a counter is increased for the matrix. Whenever a header is cleaned, this counter *Mat* object, a counter is increased for the matrix. Whenever a header is cleaned, this counter
is decreased. When the counter reaches zero the matrix is freed. Sometimes you will want to copy is decreased. When the counter reaches zero the matrix is freed. Sometimes you will want to copy
@ -95,12 +95,12 @@ Mat F = A.clone();
Mat G; Mat G;
A.copyTo(G); A.copyTo(G);
@endcode @endcode
Now modifying *F* or *G* will not affect the matrix pointed by the *A*'s header. What you need to Now modifying *F* or *G* will not affect the matrix pointed to by the *A*'s header. What you need to
remember from all this is that: remember from all this is that:
- Output image allocation for OpenCV functions is automatic (unless specified otherwise). - Output image allocation for OpenCV functions is automatic (unless specified otherwise).
- You do not need to think about memory management with OpenCV's C++ interface. - You do not need to think about memory management with OpenCV's C++ interface.
- The assignment operator and the copy constructor only copies the header. - The assignment operator and the copy constructor only copy the header.
- The underlying matrix of an image may be copied using the @ref cv::Mat::clone() and @ref cv::Mat::copyTo() - The underlying matrix of an image may be copied using the @ref cv::Mat::clone() and @ref cv::Mat::copyTo()
functions. functions.
@ -115,10 +115,10 @@ of these allows us to create many shades of gray.
For *colorful* ways we have a lot more methods to choose from. Each of them breaks it down to three For *colorful* ways we have a lot more methods to choose from. Each of them breaks it down to three
or four basic components and we can use the combination of these to create the others. The most or four basic components and we can use the combination of these to create the others. The most
popular one is RGB, mainly because this is also how our eye builds up colors. Its base colors are popular one is RGB, mainly because this is also how our eye builds up colors. Its base colors are
red, green and blue. To code the transparency of a color sometimes a fourth element: alpha (A) is red, green and blue. To code the transparency of a color sometimes a fourth element, alpha (A), is
added. added.
There are, however, many other color systems each with their own advantages: There are, however, many other color systems, each with their own advantages:
- RGB is the most common as our eyes use something similar, however keep in mind that OpenCV standard display - RGB is the most common as our eyes use something similar, however keep in mind that OpenCV standard display
system composes colors using the BGR color space (red and blue channels are swapped places). system composes colors using the BGR color space (red and blue channels are swapped places).
@ -132,11 +132,11 @@ There are, however, many other color systems each with their own advantages:
Each of the building components has its own valid domains. This leads to the data type used. How Each of the building components has its own valid domains. This leads to the data type used. How
we store a component defines the control we have over its domain. The smallest data type possible is we store a component defines the control we have over its domain. The smallest data type possible is
*char*, which means one byte or 8 bits. This may be unsigned (so can store values from 0 to 255) or *char*, which means one byte or 8 bits. This may be unsigned (so can store values from 0 to 255) or
signed (values from -127 to +127). Although in case of three components this already gives 16 signed (values from -127 to +127). Although this width, in the case of three components (like RGB), already gives 16
million possible colors to represent (like in case of RGB) we may acquire an even finer control by million possible colors to represent, we may acquire an even finer control by
using the float (4 byte = 32 bit) or double (8 byte = 64 bit) data types for each component. using the float (4 byte = 32 bit) or double (8 byte = 64 bit) data types for each component.
Nevertheless, remember that increasing the size of a component also increases the size of the whole Nevertheless, remember that increasing the size of a component also increases the size of the whole
picture in the memory. picture in memory.
Creating a Mat object explicitly Creating a Mat object explicitly
---------------------------------- ----------------------------------