Mat 和 CvMat,IplImage相互转化
- The section is just a summary “cheatsheet” of common things you may want to do with cv::Mat:. The code snippets below all assume the correct
- namespace is used:
using
 namespace
 cv
;
using
 namespace
 std
;
Convert an IplImage or CvMat to an cv::Mat and a cv::Mat to an IplImage or CvMat:
// Assuming somewhere IplImage *iplimg; exists
// and has been allocated and cv::Mat Mimg has been defined
Mat
 imgMat
(
iplimg
);
  //Construct an Mat image "img" out of an IplImage
Mimg
 =
 iplimg
;
       //Or just set the header of pre existing cv::Mat
                     //Ming to iplimg's data (no copying is done)
//Convert to IplImage or CvMat, no data copying
IplImage
 ipl_img
 =
 img
;
CvMat
 cvmat
 =
 img
;
 // convert cv::Mat -> CvMat
A very simple way to operate on a rectanglular sub-region of an image (ROI – “Region of Interest”):
//Make a rectangle
Rect
 roi
(
10
,
 20
,
 100
,
 50
);
//Point a cv::Mat header at it (no allocation is done)
Mat
 image_roi
 =
 image
(
roi
);
A bit advanced, but should you want efficiently to sample from a circular region in an image (below, instead of sampling, we just draw into a BGR image) :
// the function returns x boundary coordinates of
// the circle for each y. RxV[y1] = x1 means that
// when y=y1, -x1 <=x<=x1 is inside the circle
void
 getCircularROI
(
int
 R
,
 vector
 <
 int
 >
 &
 RxV
)
{
    RxV
.
resize
(
R
+
1
);
    for
(
 int
 y
 =
 0
;
 y
 <=
 R
;
 y
++
 )
        RxV
[
y
]
 =
 cvRound
(
sqrt
((
double
)
R
*
R
 -
 y
*
y
));
}
// This draws a circle in the green channel
// (note the "[1]" for a BGR" image,
// blue and red channels are not modified),
// but is really an example of how to *sample* from a circular region.
void
 drawCircle
(
Mat
 &
image
,
 int
 R
,
 Point
 center
)
{
    vector
<
int
>
 RxV
;
    getCircularROI
(
R
,
 RxV
);
    Mat_
<
Vec3b
>&
 img
 =
 (
Mat_
<
Vec3b
>&
)
image
;
 //3 channel pointer to image
    for
(
 int
 dy
 =
 -
R
;
 dy
 <=
 R
;
 dy
++
 )
    {
        int
 Rx
 =
 RxV
[
abs
(
dy
)];
        for
(
 int
 dx
 =
 -
Rx
;
 dx
 <=
 Rx
;
 dx
++
 )
            img
(
center
.
y
+
dy
,
 center
.
x
+
dx
)[
1
]
 =
 255
;
    }
}
出自:http://opencv.willowgarage.com/documentation/cpp/c++_cheatsheet.html
  作者:wqvbjhc
出处:https://www.cnblogs.com/wqvbjhc/
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
出处:https://www.cnblogs.com/wqvbjhc/
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号