OpenCV - eiichiromomma/CVMLAB GitHub Wiki
Intelがオープンソース化し,Willow Garage→itseez→Intelと堂々巡りの画像処理ライブラリ. (公式サイト )
基本的なフィルタ処理は勿論のこと、オープンソース化した恩恵としてSnakesやら顔の認識やらオプティカルフローやらOpenCV 距離計測やら様々な機能が追加されている。 画像を扱うにあたり、車輪の再発明を避けるためにも外部ライブラリの積極利用は必須となる。
※古い記述が混じっています
※サンプルソースは記載時のバージョンでのみ動作確認の行なっているため、現バージョンでは動かない可能性もあります。
OpenCV本(mycomから)の出版に合わせて(?)公開された、本家のリファレンスの日本語訳とサンプルソース。 非常に参考になる。
2.xのC++ I/Fの操作はだいたいこれで分かる。
- 16bitImage
- Build Githubから持ってきたソースのビルド
- CV_32F
- DFT
- GaborFilter
- Memo
- Multi-view
- HSVtoRGB
- Jetson TK1
- macOSでのcv2 インポートエラー対策
- ROI
- Stitching
- Skeletonization
- Thinning
- VideoCapture
- 教材
- エラー
- OpenCV Labeling
- OpenCV Split-Merge
- OpenCV Xcode
- OpenCV saturate_cast
- OpenCV v1tov2
- JetsonTX2 Jetson TX2で最新のOpenCVを使う
- OpenCV ARTRAY-SDK
- OpenCV C++_CLR
- OpenCV CvCalibFilter
- OpenCV CvHistogram
- OpenCV CvPoint
- OpenCV DirectShow
- OpenCV FractalDimension
- OpenCV GLCM
- OpenCV OpenMP
- OpenCV OpenCVBlobsLib
- OpenCV OpticalFlow
- OpenCV Photron
- OpenCV SIFT_SURF
- OpenCV Skeletonization
- OpenCV SVM
- OpenCV Windows
- OpenCV cvCaptureFromCAM
- OpenCV cvCvtColor
- OpenCV cvFindStereoCorrespondance
- OpenCV cvFitLine
- OpenCV cvLUT
- OpenCV cvMinEnclosingCircle
- OpenCV cvMinMaxLoc
- OpenCV cvQueryFrame
- OpenCV cvSetCaptureProperty
- OpenCV cvSetWindowProperty
- OpenCV cvcam
- OpenCV jpeglib
- OpenCV k近傍法
- OpenCV letter_recog
- OpenCV n-fold_cross_validation
- OpenCV package化
- OpenCV samples
- OpenCV videoInput
- OpenCV 窓関数
- OpenCV 動画保存
- OpenCV 機械学習
- OpenCV 縮小表示
- OpenCV 距離計測
- OpenCV 画素値参照
imread, imshow, imwrite, Mat, split, mergeなど
8x8のモザイクにして横方向の濃淡変化を各チャネルについて128を中心とした±で示して合成。
#ifdef _DEBUG
#pragma comment( lib, "cv210d.lib" )
#pragma comment( lib, "cxcore210d.lib" )
#pragma comment( lib, "cvaux210d.lib" )
#pragma comment( lib, "highgui210d.lib" )
#else
#pragma comment( lib, "cv210.lib" )
#pragma comment( lib, "cxcore210.lib" )
#pragma comment( lib, "cvaux210.lib" )
#pragma comment( lib, "highgui210.lib" )
#endif
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main(int argc, char** argv)
{
string wnSrc = "src";
string wneighth = "eighth";
string wnDst = "dst";
//画像はimreadで開く
cv::Mat src = cv::imread( string("../lenna.png)"));
//IplImageではなくMatを使う
cv::Mat eighth(cv::Size(src.cols/8,src.rows/8), CV_8UC3);
cv::Mat dst = src.clone();
cv::resize(src, eighth, eighth.size(),0, 0, cv::INTER_CUBIC);
cv::resize(eighth, dst, dst.size(), 0, 0, cv::INTER_AREA);
//b, g, rチャネルのIplImageを作る代わりにMatのvectorを作る
vector<cv::Mat> mm;
for (int i=0; i<3; i++){
mm.push_back(cv::Mat(src.size(), CV_8UC1));
}
//splitはvector<cv::Mat>も受け付ける
cv::split(dst, mm);
//iteratorで各チャネルに同一の処理をさせる例
vector<cv::Mat>::iterator it = mm.begin();
while (it !=mm.end()){
cv::Sobel(*it, *it, -1, 1, 0, 3, 1, 128);
it++;
}
cv::namedWindow(wnSrc,cv::WINDOW_AUTOSIZE);
//画像の表示はimshow
cv::imshow(wnSrc, src);
//mergeもsplit同様vectorを使える
cv::merge(mm, src);
//簡易アルファブレンディング。cvConvertScaleはconvertToに置き換わる。
//第二引数はTypeの指定
double alpha = 0.5;
dst.convertTo(dst, dst.type(), alpha);
src.convertTo(src, src.type(), 1-alpha);
cv::add(src, dst, dst);
cv::namedWindow(wneighth, cv::WINDOW_AUTOSIZE);
cv::imshow(wneighth, eighth);
cv::namedWindow(wnDst, cv::WINDOW_AUTOSIZE);
cv::imshow(wnDst, dst);
cv::waitKey(0);
//保存はimwrite
cv::imwrite(string("out.png)"), dst);
return 0;
}
原画像
結果