📄 common.c
字号:
/**
* @file common.c
* @brief
* Copyright (c) 2007,SICE
* All rights reserved.
*
* 揈梫丗嫟捠僼傽僋僔儑儞
*
* Ver : 0.1
* 嶌幰 : 錖愯摀
* 峏怴帪娫 : 2007/11/15
*/
#include "common.h"
/**
* @fn cmPutText
*
* @brief
* 揈梫丗夋憸偵暥帤傪弌椡偡傞丅
*
* @param[in] argImg 夋憸
* @param[in] argText 暥帤撪梕
* @param[in] argLoc 弌椡埵抲
* @param[in] argRgb 僇儔乕
*
* @return void
*/
void cmPutText(IplImage *argImg, char *argText, CvPoint argLoc, CvScalar argRgb)
{
CvFont font;
cvInitFont( &font, CV_FONT_HERSHEY_SIMPLEX, 0.3f, 0.3f, 0, 1, 12);//CV_FONT_VECTORO,CV_FONT_HERSHEY_SIMPLEX
cvPutText(argImg, argText, argLoc, &font, argRgb);
}
/**
* @fn cmCvtFloatToStr
*
* @brief
* 揈梫丗Convert float to string丅
*
* @param[in] fVal
* @param[in] iNdigits 彫悢埵悢
*
* @return string of fval
*/
char * cmCvtFloatToStr(float fVal, int iNdigits, char *buff)
{
char *ptr;
ptr = gcvt(fVal, iNdigits, buff);
return ptr;
}
CmLine cmLine(CvPoint pt1, CvPoint pt2)
{
CmLine line = {pt1.x,pt1.y, pt2.x,pt2.y, 0.0, NULL, NULL};
return line;
}
/**
* @fn cmReleaseCmLines
*
* @brief
* 揈梫丗Release the space of pCmLines.
*
* @param[in] pCmLines
*
* @return void
*/
void cmReleaseCmLines(CmLine **ppCmLines)
{
CmLine *pTemp = NULL;
CmLine *pLine = *ppCmLines;
while(pLine)
{
pTemp = pLine->next;
free(pLine);
pLine = pTemp;
}
*ppCmLines = NULL;
}
/*
*悢妛岞幃寁嶼
*
*/
float cmCalDistanceOfPointToLine(CvPoint pt, CmLine line)
{
/*
*L: Ax + By + C = 0
*d: abs(Axo + Byo + C) / sqrt(A*A + B*B)
*/
float A, B, C;
float d;
A = (float)(line.pt1.y-line.pt2.y);
B = (float)(line.pt2.x-line.pt1.x);
C = line.pt1.x*line.pt2.y - line.pt2.x*line.pt1.y;
d = abs(A*pt.x + B*pt.y + C);
d = d / sqrt(A*A+B*B);
return d;
}
int cmCalCoordinateYWithX(int iX, CmLine line)
{
float fCodY;
int iY;
fCodY = (line.pt2.x*line.pt1.y - line.pt1.x*line.pt2.y -
(line.pt1.y-line.pt2.y)*iX) / (line.pt2.x-line.pt1.x);
iY = (int)(fCodY+0.5);
return iY;
}
CvPoint cmCalIntersectionOfTwoLines(CmLine *line1, CmLine *line2, int iIsRelInsec)
{
float fXo, fYo;
CvPoint ptInsec;
if((line1->pt1.x == line1->pt2.x && line2->pt1.x == line2->pt2.x) ||
(line1->pt1.y == line1->pt2.y && line2->pt1.y == line2->pt2.y))
{
ptInsec.x = ptInsec.y = -1;
return ;
}
fYo = (line1->pt2.x*line1->pt1.y - line1->pt1.x*line1->pt2.y)*(line2->pt1.y-line2->pt2.y);
fYo = fYo - (line2->pt2.x*line2->pt1.y - line2->pt1.x*line2->pt2.y)*(line1->pt1.y-line1->pt2.y);
fYo = fYo / ((line1->pt2.x-line1->pt1.x)*(line2->pt1.y-line2->pt2.y)-(line2->pt2.x-line2->pt1.x)*(line1->pt1.y-line1->pt2.y));
fXo = line1->pt2.x*line1->pt1.y-line1->pt1.x*line1->pt2.y - fYo *(line1->pt2.x-line1->pt1.x);
fXo = fXo / (line1->pt1.y - line1->pt2.y);
ptInsec.x = (int)(fXo + 0.5);
ptInsec.y = (int)(fYo + 0.5);
if(iIsRelInsec == 1)
{
if(line1->pt1.x > ptInsec.x || ptInsec.x > line1->pt2.x ||
line2->pt1.x > ptInsec.x || ptInsec.x > line2->pt2.x)
{
ptInsec.x = ptInsec.y = -1;
}
}
return ptInsec;
}
int cmIsTwoPointsAtSameSizeOfLine(CvPoint pt1, CvPoint pt2, CmLine line)
{
CmLine line2 = cmLine(pt1,pt2);
CvPoint ptInsec = cmCalIntersectionOfTwoLines(&line, &line2, 0);
if(ptInsec.x > pt1.x && ptInsec.x < pt2.x || ptInsec.x > pt2.x && ptInsec.x < pt1.x)
{
return 0;
}
return 1;
}
int cmIsPointInsideOfSphere(CvPoint pt, CvPoint pt1, CvPoint pt2, CvPoint pt3, CvPoint pt4)
{
int isSameSide = 0;
isSameSide = cmIsTwoPointsAtSameSizeOfLine(pt, pt1, cmLine(pt2,pt4));
if(isSameSide == 0)
{
return 0;
}
isSameSide = cmIsTwoPointsAtSameSizeOfLine(pt, pt1, cmLine(pt3,pt4));
if(isSameSide == 0)
{
return 0;
}
isSameSide = cmIsTwoPointsAtSameSizeOfLine(pt, pt2, cmLine(pt1,pt3));
if(isSameSide == 0)
{
return 0;
}
isSameSide = cmIsTwoPointsAtSameSizeOfLine(pt, pt2, cmLine(pt3,pt4));
if(isSameSide == 0)
{
return 0;
}
isSameSide = cmIsTwoPointsAtSameSizeOfLine(pt, pt3, cmLine(pt1,pt2));
if(isSameSide == 0)
{
return 0;
}
isSameSide = cmIsTwoPointsAtSameSizeOfLine(pt, pt3, cmLine(pt2,pt4));
if(isSameSide == 0)
{
return 0;
}
isSameSide = cmIsTwoPointsAtSameSizeOfLine(pt, pt4, cmLine(pt1,pt2));
if(isSameSide == 0)
{
return 0;
}
isSameSide = cmIsTwoPointsAtSameSizeOfLine(pt, pt4, cmLine(pt1,pt3));
if(isSameSide == 0)
{
return 0;
}
return 1;
}
void cmTestShowImage(IplImage * pImg, char *win)
{
if(win==NULL || pImg==NULL)
{
return;
}
cvNamedWindow(win, 1);
cvShowImage(win, pImg);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -