00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "mcv.hh"
00034
00035 #include <iostream>
00036 #include <math.h>
00037 #include <assert.h>
00038
00039 using namespace std;
00040 using namespace cv;
00041
00042 #include <cv.h>
00043 #include <highgui.h>
00044
00045 namespace LaneDetector
00046 {
00047
00048
00049
00050
00051 void SHOW_MAT(const CvMat *pmat, char str[])
00052 {
00053 cerr << str << "\n";
00054 for(int i=0; i<pmat->rows; i++)
00055 {
00056 for(int j=0; j<pmat->cols; j++)
00057 cerr << cvGetReal2D(pmat, i, j) << " ";
00058 cerr << "\n";
00059 }
00060 }
00061
00062 void SHOT_MAT_TYPE(const CvMat *pmat)
00063 {
00064 cout << CV_MAT_TYPE(pmat->type) << "\n";
00065 }
00066
00067 void SHOW_IMAGE(const CvMat *pmat, const char str[], int wait)
00068 {
00069
00070
00071
00072
00073 CvMat *mat = cvCloneMat(pmat);
00074 assert(mat);
00075
00076
00077 if(CV_MAT_CN(mat->type) == 1)
00078 mcvScaleMat(mat, mat);
00079
00080
00081 cvNamedWindow(str, CV_WINDOW_AUTOSIZE);
00082 cvShowImage(str, mat);
00083 cvWaitKey(wait);
00084
00085
00086 cvReleaseMat(&mat);
00087
00088 }
00089
00090 void SHOW_IMAGE(const IplImage *pmat, char str[])
00091 {
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101 cvNamedWindow(str, 1);
00102 cvShowImage(str, pmat);
00103 cvWaitKey(0);
00104
00105
00106
00107
00108 }
00109
00110 void SHOW_IMAGE(Mat pmat, char str[])
00111 {
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122 imshow(str, pmat);
00123 waitKey(0);
00124
00125
00126
00127
00128 }
00129
00130 void SHOW_POINT(const FLOAT_POINT2D pt, char str[])
00131 {
00132 cerr << str << "(" << pt.x << "," << pt.y << ")\n";
00133 cerr.flush();
00134 }
00135
00136
00137 void SHOW_RECT(const CvRect rect, char str[])
00138 {
00139 cerr << str << "(x=" << rect.x << ", y=" << rect.y
00140 << ", width=" << rect.width << ", height="
00141 << rect.height << ")" << endl;
00142 cerr.flush();
00143 }
00144
00154 void mcvLoadImage(const char *filename, CvMat **clrImage, CvMat** channelImage)
00155 {
00156
00157 IplImage* im;
00158 im = cvLoadImage(filename, CV_LOAD_IMAGE_COLOR);
00159
00160 CvMat temp;
00161 cvGetMat(im, &temp);
00162 *clrImage = cvCloneMat(&temp);
00163
00164 CvMat *schannel_mat;
00165 CvMat* tchannelImage = cvCreateMat(im->height, im->width, INT_MAT_TYPE);
00166 cvSplit(*clrImage, tchannelImage, NULL, NULL, NULL);
00167
00168 *channelImage = cvCreateMat(im->height, im->width, FLOAT_MAT_TYPE);
00169 cvConvertScale(tchannelImage, *channelImage, 1./255);
00170
00171 cvReleaseMat(&tchannelImage);
00172 cvReleaseImage(&im);
00173 }
00174
00181 void mcvScaleMat(const CvMat *inMat, CvMat *outMat)
00182 {
00183
00184 cvConvert(inMat, outMat);
00185
00186
00187 double min;
00188 cvMinMaxLoc(inMat, &min, 0, 0, 0, 0);
00189 cvSubS(inMat, cvRealScalar(min), outMat);
00190
00191
00192 double max;
00193 cvMinMaxLoc(outMat, 0, &max, 0, 0, 0);
00194 if(CV_MAT_TYPE(outMat->type) == FLOAT_MAT_TYPE)
00195 cvConvertScale(outMat, outMat, 1/max);
00196 else if(CV_MAT_TYPE(outMat->type) == INT_MAT_TYPE)
00197 cvConvertScale(outMat, outMat, 255/max);
00198 }
00199
00207 template <class T>
00208 CvMat* mcvVector2Mat(const vector<T> &vec)
00209 {
00210 CvMat *mat = 0;
00211
00212 if (vec.size()>0)
00213 {
00214
00215 mat = cvCreateMat(vec.size(), 1, CV_64FC1);
00216
00217 for (int i=0; i<(int)vec.size(); i++)
00218 CV_MAT_ELEM(*mat, double, i, 0) =(double) vec[i];
00219 }
00220
00221
00222 return mat;
00223 }
00224
00225
00226
00227
00228 }