OpenCVを使って、傾いてしまった写真を正確な位置に戻したい

投稿者: Anonymous iPhoneのカメラを使って写真を撮った時に、斜めに傾いてしまった写真を正確な位置に戻したいです。 iPhoneの連写アプリなどをつかって何枚か写真を撮った時、写真1のようにまっすぐ撮れた写真と写真2のように少し傾いてしまった写真があったとします。傾いてしまった写真2をまっすぐにするために、写真1を基準にし何かしらのアルゴリズム(★1)を使って、写真2を補正したいと考えています。OpenCVにおいて、この問題を解決できるアルゴリズムは存在するでしょうか? 解決 こちらの記事が参考になるのではないでしょうか。 Opencvを使ってパノラマ写真を作る この記事のソースコードでは、以下の様な変換を行っています。 2枚の写真のSIFT特徴量を抽出し、 特徴量のマッチングを行い 画像間のホモグラフィ行列を求め 写真2を写真1平面に透視変換した画像(写真3とする)を作成 写真3に写真1を貼り付ける 上記のステップうち、5.のステップを端折れば良いかと。 記事に掲載されているソースコードの最後の部分を以下のように改変します。 Mat homo = cv::findHomography(points1, points2, CV_RANSAC); cv::warpPerspective(src[0], result, homo, Size(src[0].cols, src[0].rows)); imshow(“result img”, result); waitKey(0); このresultが求めるべき写真2(完成)になると思われます。 回答者: Anonymous

SikulixまたはOpenCVで複数種類の画像存在チェックを効率的に行う方法

投稿者: Anonymous SikulixまたはOpenCVで複数画像のどれか一つが画面内にあるかを高速に判定するロジックはあるのでしょうか。 社内で使用している社外製ERPパッケージに対してRPAもどきの自動処理をするため、Sikulixで簡単な画像認識を行っています。 画面内に表示される特定のアイコンを検知して、そのアイコンの座標をもとに次の処理を行うロジックになっているのですが速度が遅いので改善方法を探しています。 特定のアイコンは画面のどこに表示されるか分かりません。 そして特定のアイコンは12種類であり、そのうちの1つがランダムに表示されるのを検知しなければいけません。 今は12種類のアイコンをループで回して画面内で存在チェックしています。 exists関数のコストが高く、当然ですがアイコンが存在しない場合にはループを全て回すため最も処理時間が長くなります。 下記のコードでは擬似的に0-9をアイコンに見立てて存在チェックをしています。 0-9の数字をそれぞれ0.pngなど画像化してsikuliのプロジェクトフォルダに配置し、Notepadにランダムな数字を表示することでどのアイコンが表示されているかを判定します。 手元の環境では約30秒かかります。 import random app = App(“notepad.exe”) app.focus() reg = Region(App.focusedWindow()) #画面内のどこかに任意のアイコンが表示されることを再現する疑似コード type(str(random.randint(0, 9))) start = time.time() #複数種類のアイコンが存在するかチェックする疑似コード for i in range(10): #ループしながらexistsを回すため処理時間が長い(サンプルコードのため0-9.pngにそれぞれの数字のキャプチャを入れている) if reg.exists(“{}.png”.format(i)) != None: #データがあれば処理を継続する print(i) else: print(‘not exists’) elapsed = time.time() – start print(elapsed) n件の画像の配列または複数画像を連結した画像に対して、高速に存在チェックをするロジックがあればご教示ください。 解決 existsの第2引数に待ち時間を設定していないことが原因でした。 引数省略時の待ち時間は3秒であるため、存在しないアイコンに対してexistsを実行した回数に応じて処理時間が長くなりました。 下記の対応で約30秒(31~32秒)の処理が約2秒に短縮できました。 if reg.exists(imgPath,…(Continue Reading)

pyopencvを使った動画出力でGStreamerのエラー

投稿者: Anonymous 下記のようなプログラムを組んで実行したいのですがエラーが出てしまい、実行できません。 プログラム自体はこちらにある動画を保存するプログラムを海外掲示板などを参考に一部改変したものです。 import numpy as np import cv2 cap = cv2.VideoCapture(0) fourcc = cv2.cv.CV_FOURCC(*’XVID’) out = cv2.VideoWriter(‘output.avi’,fourcc,20.0,(640,480)) while(cap.isOpend()): ret,frame = cap.read() if ret == True: frame = cv2.flip(frame,0) out.write(frame) cv2.imshow(‘frame’,frame) if cv2.waitKey(1) & 0xFF == ord(“q”): break else: break cap.release() out.release() cv2.destroyAllWindows() エラーは以下のようになります。 ** (python:14547): CRITICAL **: gst_missing_encoder_message_new: assertion ‘gst_caps_is_fixed (encode_caps)’ failed (python:14547):…(Continue Reading)

MP4ファイルの読み込み

投稿者: Anonymous OpenCV3.1を使用して、ビデオファイルの読み込みをしています。 VideoCapture video; video.open(“test.mp4”); 上記のようにmp4ファイルを指定していますが、読み込みができません。 ファイルをAVIファイルに変えると読み込めます。 何が問題でしょうか? 宜しくお願い致します。 解決 自己解決しました。。 opencv_ffmpeg310.dllを他のdll同様にexeと同一フォルダに配置したところ普通に読み込めました。 回答者: Anonymous

動画への美肌フィルターの実装方法

投稿者: Anonymous BeautyPlusというアプリがあって、その中で動画に美肌にみえるフィルターをかける機能があります。 これの実現方法を思案しているのですが、なにか良いアイデアがあればご教授頂きたいです。 より具体的に説明すると、肌認識、もしくは顔認識を駆使して、カメラに写っている人間の顔の皮膚の部分のみ、シミやシワを目立たなくしたいです。この工程には、①肌認識、‌​顔認識をする。②シミやシワを目立たなくする。があると思います。ここで、①で抽出した範囲に対して、GLSLで②の処理を行う方法を知りたいです。よろしくお願いします。 また、当方画像処理にあまり詳しくなく、ブラーをかけたり、輝度を上げるくらいしか、美肌にする方法を思いつきません。この他にどんな加工をしたらシミやシワを目立たなく‌​することができるかも教えて頂けると助かります。 GPUImage(もしくはGLSL)を使った肌認識の方法もご存知の方がいたら教えて頂けると助かります。 ※現在は、GPUImageを使ってバイラテラルブラーフィルターと輝度を上げたものを美肌フィルターとして使っているのですが、バイラテラルブラーを使ってBeautyPlusと同じレベルでのシ‌​ミの除去を行おうとすると、絵がのっぺりして、解像度が低くなったような映像になってしまいます。なので、他になにか特別な手法があるのかな?と考えています。 解決 App Storeの画像を見ただけですが、シミの除去は「バイラテラルフィルター」だと思われます。また赤ら顔を抑えるための色調補正もかかっていますが、色空間やトーンカーブのパラメーターは分かりません。 追記・バイラテラルフィルターの仕組み コメントに関連してバイラテラルフィルター他のぼかし処理ついて記しておきます。 まず一番単純なぼかしフィルターとしては3×3平滑化が挙げられます。これは 画像のすべての画素の色をその画素の周囲9ピクセルの平均値で置き換える。 というアルゴリズムです。ここでの「平均値」は「1/9を掛けた値の合計」と言い換えられますが、この「1/9」をピクセルごとに別の値に変えたり、あるいは範囲を5×5や7×7に拡張すると別のフィルターが作れるわけです。このような処理を「畳み込み」と呼び、使用する係数を「カーネル」と称しますが、その中で一番メジャーなものがガウシアンフィルターで、 距離の2乗の指数に反比例する重み(ガウス分布)を係数とする、 ※e^(-r^2/2σ^2) つまり中心に近い画素を重視する平滑化処理です。 前置きが長くなりましたが、バイラテラルフィルターは 「距離」と「中心画素との輝度差」のそれぞれでガウシアンの係数を計算し、それを掛け合わせて重みとする 処理になります。なので調整できるパラメーターとしては距離、輝度のσとなります。またバイラテラルフィルターは複数回連続で適用すると効果が強まるので、回数がパラメーターとなっている場合もあります。 というわけでGPUImageのdistanceNormalizationFactorは上の式のσだと思われ、遠くの画素をどれだけ重視するかを示しています。しかしGPUImageの実装では、「平均の計算対象となっている画素が9個しかない」ように思われます。この実装で微調整ができるのかは疑わしい、というのがコメントの意図です。 追記・アルファブレンド 上記のとおり、バイラテラルフィルターは「似た色の画素を重視して平均をとる」処理です。なので適用すると陰影が全体的に弱まり、輪郭周辺で急に色が変わるという傾向になります。 なので顎周辺でバイラテラルフィルター適用結果と元の画像を滑らかに切り替える、つまり適用画像に透明度(アルファ)を設定して元画像に重ねてやれば違和感が抑えられるかもしれません。やってみないと何とも言えませんが。 回答者: Anonymous

Image can’t be shown on OpenCV with Python

投稿者: Anonymous 現在アナコンダにてOpenCVの学習をしております。しかし、指定画像をSpyder上で表示しようとするとエラーが返されます。 使用環境: Anaconda3(Python 2.7.13), Windows 7, OpenCV 3.2.0 試みた内容は下記です。 >>> import numpy as np >>> import cv2 >>> >>> img = cv2.imread(‘sample’,0) >>> cv2.imshow(‘image’,img) OpenCV Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow, fi le C:buildmaster_winpack-bindings-win64-vc14-staticopencvmoduleshighguisrc window.cpp, line 304 Traceback (most recent call last): File “<stdin>”, line 1, in <module> cv2.error: C:buildmaster_winpack-bindings-win64-vc14-staticopencvmoduleshig hguisrcwindow.cpp:304:…(Continue Reading)

OpenCVのCUDAによるCSBPとBPのサンプルコードが動作しない

投稿者: Anonymous 現在OpenCVのCUDA用ライブラリを利用してステレオマッチングを行おうとしています。 そこでOpenCV付属のサンプルコード(https://android.googlesource.com/platform/external/opencv3/+/master/samples/gpu/stereo_match.cppと同じもの)を動作させようとしているのですが、BMは正しく動作しているものの、CSBPとBPでは灰色の画面が表示されるだけで、深度の様なものは表示されません、サンプルの画像にはtsukubaを使用しています。 実行時のコマンドライン引数は次の通りです。[–right right.bmp –left left.bmp –method CSBP –ndisp 64] ndispに関しては何回かいじっているのですが一向に変化がありません。 何かご存知の方がいらっしゃいましたら教えていただけると助かります。 解決 同じところで詰まっていましたが、視差画像を表示する直前に cuda::drawColorDisp(d_disp, d_disp, p.ndisp); を追加したら動くようになりました。何故これで動くのかは分かっていません。 I have the same problem. I add cuda::drawColorDisp(d_disp, d_disp, p.ndisp); before showing disparity image It works for me. But I don’t know why. 回答者: Anonymous

Como enderezo una Imagen en python

publicado por: Anonymous He estado buscando la manera de enderezar una imagen escaneada , mas exacto un formulario ,necesito una función que automáticamente lo enderece, he intentando con import numpy as np import numpy as np import argparse import cv2 img = cv2.imread(‘D:/Consecu.jpg’,0) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) gray = cv2.bitwise_not(gray) thresh = cv2.threshold(gray, 0, 255,…(Continue Reading)

Esqueletización de una imagen. ¿Cómo quitar pixeles y completar lineas?

publicado por: Anonymous Cuando aplico esqueletización de una imagen en algunas partes las lineas son muy gruesas o se separan. No se si falta aplicar un filtro más o los parámetros deben ser diferentes. Hice varias pruebas con el umbral y es lo mejor que he podido obtener: import cv2 import numpy as np img…(Continue Reading)

openCVとProcessingで肌色検出をし、その後当たり判定をしたい

投稿者: Anonymous openCVとProcessingで肌色検出のプログラムを書きました。 肌色を検出できたところは輪郭線が描かれるようになっています。 この後、画面の中心にrectで一辺100くらいの正方形を描き、輪郭線が正方形に当たった時に、正方形の色が変わる(当たる前は赤→当たると緑になる)プログラムを書きたいです。if文でcontoursが正方形に当たった時とそうでない場合で分けるなどして色々試しましたが、結局わかりませんでした…。 どのようにするのが最適な方法なのでしょうか…? import controlP5.*; import gab.opencv.*; import processing.video.*; Capture video; OpenCV opencv; //輪郭の配列 //Contourはデータ型、contoursはオブジェクト名 ArrayList<Contour> contours; PImage dst; int w = 640; int h = 480; ControlP5 slider, slider2; int Hue_Min = 120; int Hue_Max = 150; void setup() { size(640, 480); rectMode(CENTER); video = new Capture(this, w, h); opencv =…(Continue Reading)

OpenCVで丸い緑の画像の位置を検出したい

投稿者: Anonymous 現在、OpenCVでとあるゲームのスクリーンショットを元に解析をしているのですが、あるマークがうまく検出できずに困っています。使用しているOpenCVは3.4.2で、Python3でスクリプトを書いています。 この問題は対象の画像に依存する部分が大きいため、実際に解析している画像を貼らせていただきます。 この画像を解析しているですが、カード一枚毎が大まかにどの座標に描画されているか知りたいです。 そのため、カードの切れ目に特徴点な点としてカード左上部の緑の丸の部分に注目しました。 この緑丸の座標がわかれば、緑丸毎の間隔でカード一枚毎の座標がわかるからです。 そこで以下のような緑丸だけの画像を用意しました。 そしてこれを元に、テンプレートマッチングや特徴点抽出を行いましたが、うまくいきませんでした。 そこで円を検出するアプローチに変更し、HoughCirclesを使い引数などを色々と変更しましたが、うまく緑丸の部分を検出できませんでした。 どのようにすれば、緑丸を認識することができるでしょうか?またはカード毎の座標がわかるでしょうか? ご回答いただけると助かります。 解決 手元のpython3.6環境で緑丸の外周の深緑を抽出(※1)してHoughCirclesを使ったところ、円の座標を抽出(※2)できました。 緑丸の画像は数値の有無でマッチングが難しいので、1..5の数値が入った緑丸の画像を用意する方法が最も確実だと思いますが、下記のような対応も検討してみてはいかがでしょうか。 import cv2 import numpy as np img = cv2.imread(r'[フルパス]wqraN.jpg’) # HSVに変換 hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 緑のHSV範囲(閾値を変えたい場合は下記の範囲を変更すること) lower = np.array([0x29,0xa3,0x70]) upper = np.array([0x49,0xff,0xa0]) # 緑以外にマスク mask = cv2.inRange(hsv, lower, upper) res = cv2.bitwise_and(img, img, mask= mask) # グレースケール化して判定 cimg =…(Continue Reading)

boost.interprocessでの複雑な構造体ベクターと型変換についてコンパイルエラーがあります。

投稿者: Anonymous 正月明けにすみません。 “https://stackoverflow.com/questions/33513051/structures-and-vectors-in-boost-shared-memory“という質問にある “http://coliru.stacked-crooked.com/a/0ab21481b69d87bb” にあるコードを書き換えて コードを書いています。 しかしながら、私はc++の経験はおろか、プログラミングが全くできない関係もあり、 data.push_back(id); // 14 line in main function auto&型のdataという変数でマッチングしないというコンパイルエラーが出てきてしまいました。 auto& data = Shared::locate(smt); // 10 line in “while(1)” of main function 呼び出し元は上記のところです。 正直言ってコンパイルエラーにだけならないように書き換えてきたので、エラーはここだけではないと思います。 そういうことなので全てのコードを掲載させていただきます。 どうかお助力のほうをお願いいたします。 (最終的に共有メモリ内のvectorにミリ秒とOpenCVのMatのuchar*変換とmemcpyのコピー用サイズを格納して子プロセスで一括で取りたいがために書いたコードです。) // opencv’s lib #include <cv.h> #include <cxcore.h> #include <highgui.h> // opencv’s lib end #include <string> #include <boost/interprocess/managed_shared_memory.hpp> #include <boost/interprocess/managed_mapped_file.hpp> // use for…(Continue Reading)

OpenCvSharpで切り出したはずのMATデータがうまく取得できない

投稿者: Anonymous お世話になります。 二値化されたMATデータ(以下、便宜上「画像」と表現)から矩形領域だけ取り出して、その領域のコンツァ画像を表示したのですが上手くいきません。 目的 元画像から矩形領域で切り抜いたデータのコンツァ情報及び各Blobのデータを取得したい。 詳細 下記、関数1、関数2を使用しています。 関数1では一見うまく切り出せており、BitmapConverter.ToBitmapでピクチャボックスに表示させると元画像が矩形領域だけ切り出された画像が下図のように表示されます。 図① → 図② 次に切り抜いた画像からOpenCvSharp.Blobを使用して関数2でコンツァ画像を抜き出そうとすると切り出したはずの画像ではなく元画像の方の形状が取得されます。 図③  Blobsデータの中身(個数、各blobの重心や面積)を確認しましたが、切り抜かれる前のデータ(図①)のようでしたのでnew CvBlobsした時から現象が発生しているようです。  目的としては、ここで図②のコンツァとBlobsデータを取得したいのですが、この様になり出来ません。  切り出し方が悪いのか色々試しましたが上手くいかずご教示お願いいたします。 関数 関数1(元画像(Cv2.Thresholdで二値化済み)から矩形領域だけ切り抜いた画像「this.RsltMat」を作る関数) using System; using System.Drawing; using OpenCvSharp; using OpenCvSharp.Blob; using OpenCvSharp.Extensions; public void Func1(Mat SrcMat, params int[] args) { Mat DstMat = SrcMat.Clone(); //矩形作成 Rect setRect = new Rect(args[0], args[1], args[2], args[3]); Mat WorkMat = new Mat(SrcMat.Rows, SrcMat.Cols,…(Continue Reading)

OpenCVで画像を表示しようとしても左下4分の1に領域しか描画されない

投稿者: Anonymous http://marina.sys.wakayama-u.ac.jp/~tokoi/?date=20140725 http://13mzawa2.hateblo.jp/entry/2016/08/04/210552 上記のページを参考に,OpenCVで読み込んだカメラ画像をOpenGLを使って描画しようとしています.OpenGLによる描画自体は成功するのですが,取得される画像サイズと同じ大きさのウィンドウを用意しているのにも関わらず,左下4分の1の領域にしか描画されません. OpenCVでそのまま描画するのと比較すると,OpenGLは4分の1にリサイズして左下に貼り付けているような形になっています. これをOpenGLで描画してもウィンドウいっぱいに表示されるようにしたいのですが,何が原因かわからず行き詰まっています. OpenGLで描画したウィンドウをMacbook PROに接続したディスプレイに移動させると,ウィンドウいっぱいに表示されたりするので,OpenGLのウィンドウの設定などではなく,描画の設定の問題なのだと思うのですが...(フラグメントシェーダとかでしょうか?) よろしくお願いします. PC: Macbook PRO OS: macOS 10.13.2 Xcode: 9.4 OpenCV: 3.3 OpenGL: 4.1 GLFW: 3.3 GLSL: 4.1 (ページのコードのままなので,使用しているのは3.3だと思います) 解決 上の回答が長くなってきているので、新しく回答を作成させていただきました。 GLImage.hを以下のように修正してください。 これで行けるはずです。 こちらでも同様の環境を作って、以下のコードでうまく表示できることを確認しました。 画面上に表示している板にちゃんとテクスチャUV座標を指定して描画させています。 // // OpenGLHeader.h // PerceptualProjection // // Created by Ryo Akiyama on 2018/09/06. // Copyright © 2018年 Ryo Akiyama. All rights reserved.…(Continue Reading)

import cv2でエラーが出ています: undefined symbol: PyCObject_Type

投稿者: Anonymous 環境 Ubuntu16.04 Opencv 3.4.0 python3.6 Opencvをビルドすると、cv2.soが/home/user/opencv/build/lib/cv2.soに作成されるのですが、これをpython3.6で使用できるようしたいと考えています。 python3.6のパスが通っている/usr/local/lib/python3.6/dist-packages/にシンボリックリンクをこのようにln -s /home/user/opencv/build/lib/cv2.so  cv2.so作成したのですがpython3.6でimport cv2をするとエラーが以下のように出てしまいます。 以下エラー内容 import cv2 Traceback (most recent call last): File “<stdin>”, line 1, in <module> ImportError: /usr/local/lib/python3.6/dist-packages/cv2.so: undefined symbol: PyCObject_Type Error in sys.excepthook: Traceback (most recent call last): File “/usr/lib/python3/dist-packages/apport_python_hook.py”, line 63, in apport_excepthook from apport.fileutils import likely_packaged, get_recent_crashes File “/usr/lib/python3/dist-packages/apport/__init__.py”, line 5,…(Continue Reading)

C++, C++/CLI, C#を使用したOpenCVソリューションでメモリ使用量が急激に増加する

投稿者: Anonymous Microsoft Visual Studio Community 2019 Version 16.6.2 TargetFramework .NET Core 3.1 上記環境に於いて、C++, C++/CLI, C#連携の画像処理プログラムのサンプルを作成しています。 githubにソースをアップしています。 https://github.com/Nao05215/CamTest/tree/Development 問題の現象は、カメラの読み込みが開始された直後から 急激にメモリの使用量が増加し、時には2GB付近まで上がってしまいます。 GCが働くと一旦は下がりますが、しばらく動作しつづけると徐々に上がっていくような感じです。 (手動でGC.Collect()を呼び出し続けると350MB付近で落ち着きます) あまりに急激に増加するので、プログラムの書き方が悪いのではと感じていますが 原因がどのあたりにあるのかわかっていません。 ご指摘を頂ければと思い、投稿させていただきました。 プロジェクトの内容を下記で説明します。 C++プロジェクト(StaticLiblary)でOpenCVを使用し、画像の読み込み、処理を行います。 m_ImageにMat形式の画像を設定し、onPropertyChangedを呼び出すことでC++/CLIに変更通知を行っています。 void Camera::setImage(const cv::Mat& value) { m_Image = value; onPropertyChanged("Image", &value); } C++/CLIプロジェクト(DynamicLiblary)でC++プロジェクトをラップします。 ここでC++プロジェクトの変更通知から受け取ったMat形式の画像を Mat -> Bitmap -> BitmapSourceに変換してImageプロパティに設定しています。 void OnObservePropertyChanged(std::string propertyName, void* value) { if (propertyName ==…(Continue Reading)

OpenCVのVideoCaptureのreadメソッドで取得したデータの解放について

投稿者: Anonymous VideoCapture v; MAT img; v = VideoCapture(…); for ( ; ; ) { v.read(img); // またはv >> img; ・ ・ // 処理 ・ ・ ・ } OpenCV3.2で自動変数としてMATクラスを定義し上記の様な処理をループ内で繰り返し実行する場合、 使いまわされるimgは下記の様にリソース解放処理を実行するべきでしょうか? それともreadメソッド内で更新される時、一旦releaseしてから上書きするのでしょうか。 VideoCapture v; MAT img; v = VideoCapture(…); for ( ; ; ) { img.release(); v.read(img); // またはv >> img; ・ ・ // 処理 ・…(Continue Reading)

Pythonにて「色の代表」ピクセルを選択するアルゴリズムを知りたいです

投稿者: Anonymous RGB形式の画像があります。 この画像は高さ900、横900ピクセルとします。 画像には80色あります。900*900=810000ピクセルの画像ですので、80色しかありませんので、1個以上のピクセルが同じ色です。 このように複数のピクセルが同じ色の場合にその色の「代表ピクセル」を選びたいです。但し、選ばれた「代表ピクセル」とその周りの変色度はその他の同じ色のピクセルとその周りの変色度より低く(最も低い)なければなりません。例えば、赤のピクセル[255,0,0]を選ぶ場合には周りの8ピクセルがオール[255,0,0]の物と周りが白「255,255,255]がありましたら、周りとの変色度が比較的低い周りが赤の物を選びます。この場合の変色度は[255,0,0] – [255,0,0] = [0,0,0]ですのでゼロです。np.sum(np.abs(diff))的に変色度を計算して問題ありません。 その次の条件として、80色ありますが、選ばれた80個がなるべく画像内で散らばっているように選びたいです。一箇所、何箇所かに固まっていないようにしたいです。 解決 np.sum(np.abs(diff))的に変色度を計算して問題ありません あるピクセルと周囲のピクセル(surr)の RGB 値の差分(絶対値)の総計を計算しています。実際には画像の端(edge)や角(corner)にあるピクセルの場合、周囲にあるピクセル数が 3 や 5 になるので、差分の総計値をそのピクセル数で割っています。 以下のコードでは Pillow ライブラリを利用しています。 from PIL import Image import numpy as np im = Image.open(‘test.png’).convert(‘RGB’) w, h = im.size surr = [ (-1, -1), (0, -1), (1, -1), (-1, 0), (1, 0), (-1, 1), (0, 1),…(Continue Reading)

opencvの関数CV_CAP_PROP_FRAME_HEIGHTの中身が知りたいです。

投稿者: Anonymous cv::VideoCapture cap(0); cap.set(cv::CAP_PROP_FRAME_WIDTH, 幅); cap.set(cv::CAP_PROP_FRAME_HEIGHT, 高さ); は、opencvから提供されたソースコードです。出力ウィンドのサイズを変える働きをします。 以上のソースコードに関しての質問なのですが、載せましたプログラム   /**   * eye-tracking.cpp:   * Eye detection and tracking with OpenCV   *   * This program tries to detect and tracking the user’s eye with webcam.   * At startup, the program performs face detection followed by eye detection   * using OpenCV’s built-in Haar cascade classifier. If the…(Continue Reading)

pythonで画像上の建造物を物体として認識させたい

投稿者: Anonymous 画像上の特定の部分をオブジェクトとして認識させたい 具体的には、画像の空(そら)の部分との差分として、建造物を物体として認識できるようにし対と思っています。(空の領域に重なっていない物体は認識しない) 物体として認識することによって、例えばグラフなどを上に重ねたときにグラフと物体の交点が得られるような処理をおこないたいと思っています。 プログラミング言語:python3.6 開発環境:Winpython – Spyder OS:Windows7 解決 マルチポスト先で回答をいただきました。 よって、自己解決とさせていただきます。 回答内容: Deep Learning の SegNet というモデルを使い、画像を領域ごとに分割させる。 回答者: Anonymous

openCV 外部パラメータ検出の際エラーが出てしまいます

投稿者: Anonymous 現在openCVでカメラキャリブレーションをしているのですが、デバッグエラーが検出されます。 使っているのはopenCV2.4.11 Visual Studio 2015 Window10 です。 プログラム内容は http://opencv.jp/sample/camera_calibration.html の一番上のコードを試させていただいているのですが、画像読み込み、コーナーの描写をした後、外部パラメータまで進むとデバッグエラーとなってしまいます。 具体的にはCvMat sub_image_points, sub_object_points;の部分です。 エラーは下のような文章が出ます。 OpenCV Error: Assertion failed (_dst.fixedType()) in cv::convertPointsHomogeneous, file C:buildslave64win64_amdoclmaster_PackSlave-win64-vc14-sharedopencvmodulescalib3dsrcfundam.cpp, line 1034 プログラムは初心者でどのように改善すればいいのか全くわかりません。お手数ですが回答の方お願いします。 変更した点として、include文を、 #include “opencv2opencv.hpp” #include “opencv2imgprocimgproc.hpp” #include “opencv2objdetectobjdetect.hpp” #include “opencv2highguihighgui.hpp” #include “opencv2calib3dcalib3d.hpp” #include “iostream” #include “iomanip” #include “stdio.h” #include “opencvcv.h” #include “opencvhighgui.h” using namespace cv; using namespace std; としています。おそらくいらない部分もあると思います 申し訳ございません。 #include…(Continue Reading)

Androidでマイナー言語(ラオス語)を写真に撮って、文字認識をさせたい。

投稿者: Anonymous お世話になります。 現在Androidアプリ(4.2~)を開発中なのですが、将来の機能として、 ラオス語の看板や、メニューを写真に撮って翻訳を表示させる機能を実装したいと思っています。 ですが、文字認識や、機械学習の知識がなくどこからどう初めて良いか分かりません。 OpenCV3.0でJavaがサポートされ、機能として機械学習も利用できると聞いたので、 OpenCVを利用すれば何とかなるのではと思っているのですが、手掛かりがありません。 そもそも前提知識が必要ということならどの本で学べばよいか、またすでに同じようなことをされている方がいて情報が公開されているならそれを教えていただけないでしょうか? ちなみに、OpenCVで利用可能な文字認識のパッケージ?はラオス語のものは存在してないみたいです。 以上、よろしくお願いします。 解決 ラオ文字については後述します。 まず文字認識といえばTesseract OCRと思ったのでググるとOpenCV3.0から使える文字認識のもこれっぽいですね。 http://whoopsidaisies.hatenablog.com/entry/2014/11/12/003100 http://independence-sys.net/main/?p=1831 この辺が参考になるでしょうか。 なお、OpenCVは前処理にしか使われていませんが、androidの文字認識アプリの参考として以下とかどうでしょう? http://www.slideshare.net/youheiyamaguchi/ss-12902286 さらにアルゴリズム的な所は以下とか。 http://www.slideshare.net/levelfour/shrift 肝心のラオ文字の文字認識についてですが、Tesseractの場合、なければ作れます。 http://hadashi-gensan.hatenablog.com/entry/2014/01/15/135316 http://www.slideshare.net/takmin/tesseract-ocr まあ、この学習データの良し悪しが精度は精度に効いてくるのでなかなか大変だとは思いますが、文字種が少ないのでそれなりのものが得られるのではないでしょうか。 ついでにandroidでのTesseractとか。 http://qiita.com/Nunocky/items/17df047a2a945d7a0a14 http://tech.jsa.co.jp/tess-two_2_how_to_recognize/ 回答者: Anonymous

MacOS c++でopenCVが実行できない

投稿者: Anonymous 以下のtest.cppファイルを #include <opencv2/opencv.hpp> int main(){ cv::Mat a = cv::imread(“test.jpg”, 1); cv::imshow(“hello”, a); cv::waitKey(); } 次のように実行したところ、 c++ -std=c++14 test.cpp -I/usr/local/Cellar/opencv/4.0.1/include/opencv4 次のようなエラーが出て実行できませんでした。 Undefined symbols for architecture x86_64: “cv::Mat::deallocate()”, referenced from: cv::Mat::release() in test-4fd227.o “cv::imread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)”, referenced from: _main in test-4fd227.o “cv::imshow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cv::_InputArray const&)”, referenced from: _main in…(Continue Reading)

エラー 画像を自動でしきい値を決めて2値化したい。大津のアルゴリズム

投稿者: Anonymous AnacondaでOpenCVを学習しております。指定画像を2値化して表示をしたいのですが、エラーが返されます。 使用環境: Anaconda3(Python 2.7.13), Windows 7, OpenCV 3.2.0 試みた実行したのは下記[threshold.py]です。 # coding: UTF-8 import cv2 img = cv2.imread(’01.png’, cv2.COLOR_BGR2GRAY) ret, th_Otsu = cv2.threshold(img, 0, 255, cv2.THRESH_TOZERO + cv2.THRESH_OTSU) cv2.imshow(’01_Otsu.png’, th_Otsu) cv2.waitKey(0) cv2.destroyAllWindows() 下記 実行時のエラーです。 OpenCV Error: Assertion failed (src.type() == CV_8UC1) in cv::threshold, file C:buildmaster_winpack-bindings-win32-vc14-staticopencvmodulesimgprocsrcthresh.cpp, line 1356 Traceback (most recent call last): File “C:/Users/admin/.spyder-py3/threshold.py”, line…(Continue Reading)

opencv3のcv2.soとffmpeg内のlibavcodec.56.dylibのバージョンが違うことへの対処法

投稿者: Anonymous opencv3のパイソンバインディングを使っていますが、下記エラーによりcv2をimportできません。 エラー Python 2.7.10 (default, Oct 23 2015, 18:05:06) [GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin Type “help”, “copyright”, “credits” or “license” for more information. >>> import cv2 Traceback (most recent call last): File “<stdin>”, line 1, in <module> ImportError: dlopen(./cv2.so, 2): Library not loaded: /usr/local/opt/ffmpeg/lib/libavcodec.56.dylib Referenced from: /usr/local/Cellar/opencv3/3.1.0_1/lib/libopencv_videoio.3.1.dylib Reason: image…(Continue Reading)

OpenCVにて動画データ表示不可。

投稿者: Anonymous 現在AnacondaにてOpenCVの学習をしております。しかし、動画データをSpyder上で表示しようとしたところ、エラーは何も返ってきてないのにもかかわらず、指定動画が再生表示されません。 使用環境: Anaconda3(Python 2.7.13), Windows 7, OpenCV 3.2.0 試みた内容は下記です。 import numpy as np import cv2 cap = cv2.VideoCapture(‘Traffic.mpg’) while(cap.isOpened()): ret, frame = cap.read() gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) cv2.imshow(‘frame’,gray) if cv2.waitKey(1) & 0xFF == ord(‘q’): break cap.release() cv2.destroyAllWindows() ご助言のほどよろしくお願いいたします。 解決 OpenCVのVideoCaptureは、デフォルトだとAVIファイルからの読み込みしかサポートしません。 FFmpegオプション有効でビルドされたOpenCVならば、対応フォーマットが増えた気がします(未確認)。AnacondaでインストールされるOpenCVライブラリのビルドオプションが不明ですが、おそらく自前でソースコードからビルドが必要でしょう。 回答者: Anonymous

C++, OpenCV : 行列のサイズを大きくすると”Access violation reading location”エラーが出る

投稿者: Anonymous C++でOpenCVを用いてニューラルネットワークをトレーニングしたいです。 このエントリを参考にしました。 参考サイト 識別する画像は30*50の2値画像です。 訓練画像を読み込み、最後の列(INPUT+1)に教師信号(出力が1.0になってほしいニューロン)を付加して、1枚の画像を1行に出力し、csvファイルとしました。 グローバル定数は以下のように定義し、 const int TRAINING_SAMPLES = 300; //訓練データ数 const int INPUT = 30 * 50; // 入力次元 const int CLASSES = 10; //出力次元 学習データ、教師データは以下のように宣言しています。 //—学習データ— cv::Mat trainingData(TRAINING_SAMPLES, INPUT, CV_32F); //—教師データ— cv::Mat trainingTeacher(TRAINING_SAMPLES, CLASSES, CV_32F); //—データセットの読み込み— readDataSet(filename, trainingData, trainingTeacher); csvファイルから訓練データを読み込む関数です。 void readDataSet( char* filename, cv::Mat &data, cv::Mat &teacher) { ifstream ifs(filename);…(Continue Reading)

Python2のOpenCV3でエラー

投稿者: Anonymous 画像をグレイスケールに変換しようといましたがcvが見当たらないというエラーがでてしまいました。 エラー Traceback (most recent call last): File “face_recognition.py”, line 13, in <module> image_gray = cv2.cvtColor(image, cv2.cv.CV_BGR2GRAY) AttributeError: ‘module’ object has no attribute ‘cv’ コード #conding:utf-8 import cv2 cascade_path = “/usr/local/opt/opencv3/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml” image_path = “lena.png” color = (255, 255, 255) image = cv2.imread(image_path) image_gray = cv2.cvtColor(image, cv2.cv.CV_BGR2GRAY) cascade = cv2.CascadeClassifier(cascade_path) facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.1,…(Continue Reading)

OpenCV のリンカエラー 2019 facemarkを使って顔の特徴点を抽出するプログラム

投稿者: Anonymous Visual Studio2017で特徴点を抽出するプログラムを作成しているのですがリンカエラーでうまいこと行きません。 ソースコードは Facemark : Facial Landmark Detection using OpenCV にあるものを使用しています。ただし、少しだけ変えていますがおおむね同じです。 変更点 変更前: Ptr<Facemark>facemark= FacemarkLBF::create(); 変更後: Ptr<Facemark>facemark= createFacemarkLBF(); しかし、ビルドしても以下のようなエラーが出てうまくいきません。   “エラー LNK2019 未解決の外部シンボル “struct cv::Ptr __cdecl cv::face::createFacemarkLBF(void)” ([email protected]@[email protected]@[email protected]@[email protected]@@@[email protected]) が関数 main で参照されました。”   ライブラリファイルを追加したり、OpenCVを一度入れ直したりしましたが駄目でした。 ちなみに、変更する前でも似たよう部分でリンカエラーが出ます。 OpenCVは4.1.1を使用しています。 どのようにすれば解決できるか教えてください。 解決 k systemさんの調査によるとcontribパッケージに含まれており、配布されているバイナリには含まれていないとのこと。そしてcontribの自前でのビルド方法についてコメントされていますが…もっと簡単にビルドできます。 Visual Studioではvcpkgというパッケージマネージャーが提供されています。vcpkgではOpenCVも提供されています。 vcpkgの導入方法 Visual Studioおよびgitが使用可能なコマンドプロンプトで git clone https://github.com/Microsoft/vcpkg.git cd vcpkg bootstrap-vcpkg.bat vcpkg integrate install…(Continue Reading)

Convertir una imagen a escala de grises, pero conservando los canales (python)

publicado por: Anonymous Necesito convertir una imagen de color RGB a escala de grises, pero conservando los tres canales. Actualmente estoy utilizando la funcion de openCV: cv2.cvtColor(imagen, cv2.COLOR_BGR2GRAY) Pero claro, esa me la devuelve en un número de canales inferior. ¿Hay alguna forma de pasar la imagen a escala de grises pero que siga teniendo…(Continue Reading)