各種関数の二次パッケージング(継続更新)
10358 ワード
1.プログラム実行パスの取得(C++)
1.1 Win 32版
1.2 MFC版
1.3 dll版
2.平均階調値の取得(OpenCV)
2.1 maskバージョンなし
3.多角形の輪郭を描く(OpenCV)
3.1配列
3.2 vector
4.画像コントラスト調整(OpenCV)
4.1輝度増強と小幅増加コントラスト
4.2ヒストグラム等化(OpenCV)
5.簡単なグラデーション生成(OpenCV)
6.c++ファイルが存在するか否かを判断する(C++)
7.中空円の描画(Flash AS 3)
8.現在時刻のフォーマット(Flash AS 3)
9.ファイルを消去する(C++/MFC)
10.ネットワーク接続判定(C++)
11.取得時間
12.データは16進数で送信
13.単一Charデータを16進数で表示
14.Socket断線検出
15.10進文字列から16進文字列へ
1.1 Win 32版
string GetHomeFolder()
{
// ,
string path = _pgmptr;
size_t pos = path.rfind('\\');
path = path.substr(0, pos);
return path + "\\";
}
1.2 MFC版
CString GetHomeFolder()
{
//
CString path;
GetModuleFileName(NULL, path.GetBufferSetLength(MAX_PATH + 1), MAX_PATH);
path.ReleaseBuffer();
int pos = path.ReverseFind('\\');
path = path.Left(pos);
return path + "\\";
}
1.3 dll版
std::string GetAppFilePath()
{
std::string szPath;
char szBuff[MAX_PATH] = { 0 };
HMODULE hModuleInstance = _AtlBaseModule.GetModuleInstance();
GetModuleFileNameA(hModuleInstance, szBuff, MAX_PATH);
szPath = szBuff;
szPath = szPath.substr(0, szPath.rfind('\\'));
return szPath+"\\";
}
2.平均階調値の取得(OpenCV)
2.1 maskバージョンなし
double GetAvgValue(Mat &Src)
{
double val=0.0;
Mat temp = Src.clone();
IplImage imgTmp = temp;
IplImage *input = cvCloneImage(&imgTmp);
CvScalar bColor = cvAvg(input);
//Gray=R*0.299+G*0.587+B*0.114
val = bColor.val[2] * 0.299 + bColor.val[1] * 0.587 + bColor.val[0] * 0.114;
cvReleaseImage(&input);
return val;
}
3.多角形の輪郭を描く(OpenCV)
3.1配列
bool DrawPolylines(Mat &Src, Point *pt, int size)
{
if (Src.empty())return false;
Point **rPoints = new Point *[1];//[1][FACE_SECTION_DOWN];
rPoints[0] = new Point[size];
int npt[] = { size };
for (int i = 0; i < size; i++)
{
rPoints[0][i] = pt[i] ;
}
const Point* ppt[1] = { rPoints[0] };
//cv::fillPoly(Src, ppt,npt,1,Scalar(10,40,230),0);
cv::polylines(Src, ppt, npt, 1,true, Scalar(0, 0, 0));
delete[] rPoints[0];
delete[] rPoints;
return true;
}
3.2 vector
bool DrawPolylines(Mat &Src, std::vector Pts)
{
if (Src.empty())return false;
if (Pts.size() == 0)return false;
int size = Pts.size();
Point **rPoints = new Point *[1];//[1][FACE_SECTION_DOWN];
rPoints[0] = new Point[size];
int npt[] = { size };
for (int i = 0; i < size; i++)
{
rPoints[0][i] = Pts.at(i);
}
const Point* ppt[1] = { rPoints[0] };
//cv::fillPoly(Src, ppt,npt,1,Scalar(10,40,230),0);
cv::polylines(Src, ppt, npt, 1, true, Scalar(0, 0, 0));
delete[] rPoints[0];
delete[] rPoints;
return true;
}
4.画像コントラスト調整(OpenCV)
4.1輝度増強と小幅増加コントラスト
bool ChnageLight(Mat &Src, Mat &Dst ,float alpha, float beta)
{
if (Src.empty() || Src.channels() != 3)
{
return false;
}
int height = Src.rows;
int width = Src.cols;
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
Dst.at<:vec3b>(i, j)[0] = cv::saturate_cast(alpha*(Src.at<:vec3b>(i, j)[0]) + beta);
Dst.at<:vec3b>(i, j)[1] = cv::saturate_cast(alpha*(Src.at<:vec3b>(i, j)[1]) + beta);
Dst.at<:vec3b>(i, j)[2] = cv::saturate_cast(alpha*(Src.at<:vec3b>(i, j)[2]) + beta);
}
}
return true;
}
4.2ヒストグラム等化(OpenCV)
bool SetEqualizeHist(cv::Mat &Src,cv::Mat &Dst)
{
cv::Mat imageRGB[3];
cv::split(Src, imageRGB);
for (int i = 0; i < 3; i++)
{
cv::equalizeHist(imageRGB[i], imageRGB[i]);
}
cv::merge(imageRGB, 3, Dst);
}
5.簡単なグラデーション生成(OpenCV)
Mat CFacialBeauty::CreateMask(cv::Scalar bClolr )
{
//
Mat bMat(600,600,CV_8UC3);
std::vector<:mat> bMat_channels;
cv::split(bMat, bMat_channels);
//
for (int i = 0; i < bMat.rows ; i++)
{
for (int j = 0; j < bMat.cols ; j++)
{
bMat_channels[0].at(i, j) = cv::saturate_cast(i* 0.15 + bClolr.val[0]);
bMat_channels[1].at(i, j) = cv::saturate_cast(i* 0.26 + bClolr.val[1]);
bMat_channels[2].at(i, j) = cv::saturate_cast(i* 0.07 + bClolr.val[2]);
}
}
cv::merge(bMat_channels, bMat);
return bMat;
}
6.c++ファイルが存在するか否かを判断する(C++)
bool fileExist(string path)
{
ifstream fin(path);
if (!fin)
{
return false;
}
return true;
}
7.中空円の描画(Flash AS 3)
private function DrawCircle(pt:Point,r:int):void
{
this.graphics.moveTo(r+pt.x,pt.y);//
this.graphics.lineStyle(1.5,0xff0000);// ( , )
for (var radian:Number=0.01; radian<2*Math.PI; radian+=0.01)
{
var diP:Point = Point.polar(r,radian);// 。
var dx:Number = pt.x+diP.x;
var dy:Number = pt.y+diP.y;
this.graphics.lineTo(dx,dy);// 。
}
}
private function DrawCircle1(pt:Point,r:int):void
{
circle = new Shape();
circle.graphics.lineStyle(1.5,0xff0000);// ( , )
circle.graphics.drawCircle(pt.x, pt.y, r); //x,y,
stage.addChild(circle);
}
8.現在時刻のフォーマット(Flash AS 3)
function GetDate():String{
// ,
var nowdate:Date = new Date();
//
var year:Number = nowdate.getFullYear();
// , 0 0-11 1-12 , 1
var month:Number = nowdate.getMonth()+1;
//
var date:Number = nowdate.getDate();
//
var hour:Number = nowdate.getHours();
//
var minute:Number = nowdate.getMinutes();
//
var second:Number = nowdate.getSeconds();
var Name:String=year.toString();
Name+=month>10?month.toString():"0"+month.toString();
Name+=date>10?date.toString():"0"+date.toString();
Name+=hour>10?hour.toString():"0"+hour.toString();
Name+=minute>10?minute.toString():"0"+minute.toString();
Name+=second>10?second.toString():"0"+second.toString();
return Name;
}
9.ファイルを消去する(C++/MFC)
// ( , cmd , );
//Path: ,
SetFileAttributes(Path, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
10.ネットワーク接続判定(C++)
//
bool IsOnline()
{
DWORD flag;
if (InternetGetConnectedState(&flag, 0) == TRUE)
{
return true;
}
return false;
}
11.取得時間
CTime t = CTime::GetCurrentTime();
CString tt = t.Format("%Y%m%d%H%M%S");
12.データは16進数で送信
void HexStringFilter(CString &str)
{
BOOL bOK;
for (int i = 0; i= '0') && (str.GetAt(i) <= '9')) ||
((str.GetAt(i) >= 'A') && (str.GetAt(i) <= 'F')) ||
((str.GetAt(i) >= 'a') && (str.GetAt(i) <= 'f'));
if (!bOK)
str.Delete(i);
else i++;
}
}
char CombineHexChar(char CharH, char CharL)
{
char result;
CString temp;
if (CharH >= '0'&&CharH <= '9') result = (CharH - '0');
else if (CharH >= 'a'&&CharH <= 'f') result = (CharH - 'a' + 10);
else if (CharH >= 'A'&&CharH <= 'F') result = (CharH - 'A' + 10);
else result = 0;
result <<= 4;
if (CharL >= '0'&&CharL <= '9') result += (CharL - '0');
else if (CharL >= 'a'&&CharL <= 'f') result += (CharL - 'a' + 10);
else if (CharL >= 'A'&&CharL <= 'F') result += (CharL - 'A' + 10);
else result += 0;
return result;
}
// 16 ,
CString ChangeCharstr2Hexstr(CString Charstr)
{
CString Hexstr = _T("");
Charstr.MakeUpper();
HexStringFilter(Charstr);
int Length = Charstr.GetLength();
if (Length % 2)
Charstr.Delete(Length - 1);
Length = Charstr.GetLength();
for (int i = 0; i
13.単一Charデータを16進数で表示
CString DevideHexChar(char HexChar)
{
CString result = _T("");
int temp = (HexChar & 0xF0) >> 4;
if (temp < 10)
{
result += (char)(temp + '0');
}
else
{
result += (char)(temp + 'A' - 10);
}
temp = HexChar & 0x0F;
if (temp < 10)
{
result += (char)(temp + '0');
}
else
{
result += (char)(temp + 'A' - 10);
}
return result;
}
14.Socket断線検出
//https://blog.csdn.net/sjin_1314/article/details/8897588?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
bool SocketCheck(SOCKET sock)
{
// select() socket , select() 1,
// recv() 0 , socket
char buff[20];
memset(buff, NULL, sizeof(char) * 20);
struct timeval timeout = { 1, 0 };
fd_set rdfs;
FD_ZERO(&rdfs);
FD_SET(sock, &rdfs);
int re= select(sock + 1, &rdfs, NULL, NULL, &timeout);
if (re > 0)
{
int recvLen = recv(sock, buff, sizeof(buff), 0);
if (recvLen > 0)
{
//printf("socket connected
");
return true;
}
else if (recvLen < 0)
{
if (errno == EINTR)
{
//printf("socket connected
");
return true;
}
else
{
//printf("socket disconnected! connect again!
");
return false;
}
}
else if (recvLen == 0)
{
//printf("socket disconnected!connect again
");
return false;
}
}
else if (re == 0)
{
//time out
//printf("socket connected
");
return true;
}
else if (re < 0)
{
if (errno == EINTR)
{
//printf("socket connected
");
return true;
}
else
{
//printf("socket disconnected ! connect again!
");
return false;
}
}
}
15.10進文字列から16進文字列へ
//#include
//#include
std::string dec2hex(int i, int width)
{
std::stringstream ioss; //
std::string s_temp; //
ioss << std::hex << i; //
ioss >> s_temp;
std::string s(width - s_temp.size(), '0'); // 0
s += s_temp; //
return s;
}