あれ?ここは?電脳意識の中か?。。(ザザッ、、)やあ、俺だよ。
任意の画像形式をPNG形式に変換するツールをC++でお手軽に作りたくなったので、OpenCVで何も考えずに、imreadとimwriteを使って作ったのでそのための最低限のソースを以下にメモってみる。まさにPowered By OpenCV。
(OpenCV 3.4.1使用)
(以下、ヘッダーやライブラリのリンクは、あなたのOpenCV環境による話ですので臨機応変に対応ください。)
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <shlwapi.h> #include "opencv2/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgcodecs.hpp" #pragma comment(lib, "shlwapi.lib") #ifdef _DEBUG #define CV_EXT "d.lib" #else #define CV_EXT ".lib" #endif #pragma comment(lib, "opencv_core340" CV_EXT) #pragma comment(lib, "opencv_highgui340" CV_EXT) #pragma comment(lib, "opencv_imgcodecs340" CV_EXT) using namespace std; int main(int argc, char* argv[]) { if (argc < 2) { cout << "usage a.exe <image_file_path>" << endl; return 0; } if (PathFileExists(argv[1])==FALSE) { cout << "could not open file. abort.\n" << endl; return 0; } cv::Mat image; // 任意形式の画像を読み込みます。 image = cv::imread(argv[1], CV_LOAD_IMAGE_COLOR); //cv::imshow("hi", image); char fn[234];//←まここはお好みで(笑) strcpy(fn, argv[1]); *PathFindExtension(fn) = '\0'; strcat(fn, ".png"); // 元画像と同じ場所にPNG形式として出力します。 cv::imwrite(fn, image); return 0; }
PNGへの変換目的のためだけに、作ってるプログラムをOpenCV依存アプリにするのも嫌だったので、こういう別個独立お簡単ツールとして作ってみました。
まこれで作ったEXEを起動するBATを書いて、そのショートカットに、変換したい画像をドロップするもよし、そのショートカット(.lnkファイル)を、
for %%i 文の中で呼び出して、全画像ファイル一括バッチ変換!みたいなことしてもいいし。夢も広がるってもんだ。