【Intel】OpenCV総合スレ 5画素目【画像処理】

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2013/10/25(金) 17:28:16.71
OpenCVはインテルが公開したオープンソースのコンピュータービジョンライブラリ。
現在はWillowGateが開発している。

本家
http://opencv.willowgarage.com/wiki/

日本語資料など
http://opencv.jp/


【Intel】OpenCV総合スレ 4画素目【画像処理】
http://toro.2ch.net/test/read.cgi/tech/1329040627/
2017/08/08(火) 13:27:02.96ID:yWPGhfQU
あ、CV_8UC3はsrc.type()の方がよかったね
まあエラーとかも含めてその辺適当に。。

要するに、生き残る範囲を選択した後、黒塗りの画像上の移動先に貼り付けるだけ。
687682
垢版 |
2017/08/08(火) 13:53:46.34ID:OvVzYAy2
上手くいきましたorz
688682
垢版 |
2017/08/08(火) 14:48:58.13ID:OvVzYAy2
意外だったのは、
>Matなんだから→行列計算で移動のアフィン変換
だと思っていたのに、
Rectで解決なんですね。
基本的な考え方がわかったような気がします。

次には、回転を自分で作る、もしくは、ネットから拾ってくる予定です。
2017/08/08(火) 15:30:02.27ID:yWPGhfQU
なんだよ実装の勉強じゃないのかよ!
それならopencv 平行移動 とかで何ぼでも出てくる気がする
てか回転まで必要なら最初からアフィン変換使えって話になってくるだろうしw
まあ頑張ってー
690684
垢版 |
2017/08/08(火) 17:00:34.40ID:OvVzYAy2
>それならopencv 平行移動 とかで何ぼでも
出てこないです。
>アフィン変換使えって話
平行移動は、Rect処理にします。

void rot(Mat src, Mat &dst, double degree)
{
cv::Point2f center = cv::Point2f(
static_cast<float>(src.cols / 2),
static_cast<float>(src.rows / 2));

double scale = 1.0; // 拡大率

// アフィン変換行列
cv::Mat affine;
cv::getRotationMatrix2D(center, degree, scale).copyTo(affine);
cv::warpAffine(src, dst, affine, src.size(), cv::INTER_CUBIC);
}

回転が、反時計回転になるのが不思議ですね。
あと、degreeはラジアンじゃなくて、シータなんですね。
691684
垢版 |
2017/08/08(火) 17:41:38.99ID:OvVzYAy2
反時計回転になる原因わかりました。

>GetRotationMatrix2D
>正の値は,反時計回りの回転を意味します

不思議な流儀ですね。

ラップする関数でも、
この流儀に従った方がよいのか、
関数内でマイナスするか、、、

一応、自分の書きたかったことはこれで終了ですが、レスは延々と読み続けます。
2017/08/09(水) 00:23:06.07ID:XzB0Bln2
>>691
高校で三角関数やらなかった?数学では0度がx軸右方向で反時計回りに回ってって90度がy軸上方向ってのが一般的じゃない?
もちろん、なぜx軸を上方向にとってy軸を右方向にとったり、x軸を右方向にとってy軸を下方向にとらなかったのか?ということを言い出したら「不思議な流儀」になるかもしれないが
2017/08/09(水) 03:53:55.23ID:GMdirX6E
滅茶苦茶初歩的な質問で申し訳ないんですが
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
をインクルードしてるのにcv::circle()が無いと言われるのはなぜでしょうか
imshow()やwaitkey()は使えます
OpenCVのバージョンは3.3.0です
2017/08/09(水) 07:38:06.13ID:wpOQdQY0
>>693
エラーメッセージを全部入れてくれないとなんともいいようがないが
インクルードしてるのに関数が見つからない場合は -lopencv_core とか
そんなのを指定し忘れてるとかかなぁ
2017/08/09(水) 10:03:31.22ID:Nar8iR46
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

何するか知らんが、チュートリアルレベルならだいたいこの3つで事足りる。
2017/08/09(水) 13:24:55.64ID:LtfCN5pR
再生動画(といっても、静止画の配列)のブレ補正処理は、
どういったメソッドでやられてますでしょうか?
2017/08/10(木) 09:01:05.14ID:xLSenUHW
cv::Matの大きさを変える場合には、
>mt = cv::Mat(height, width, CV_8U).clone();
といった書き方でよいのでしょうか?
2017/08/10(木) 09:05:14.19ID:pkwCcRJu
大きさを変えるとは?
元画像があって、指定した大きさに拡大・縮小したいという意味?
2017/08/10(木) 09:31:23.08ID:xLSenUHW
バッファの大きさを変えるだけです。
cv::Mat mt(height, width, CV_8U);
と宣言時に大きさかけますけど、
宣言後にバッファサイズを変える方法が分からなくて。
2017/08/10(木) 13:26:58.12ID:Sraj3Va7
大きさ変えるってのがうーん
今のデータを残しつつ新しい部分を追加するってこと?
2017/08/10(木) 13:51:49.93ID:CcnWoQiq
mt = cv::Mat(height*2, width, CV_8U);
2017/08/10(木) 14:21:25.23ID:xLSenUHW
え、
>.clone
要らないんですね。
左辺と右辺でバッファの実態が共有されるのに、
次の行でメモリ解放されないんでしょうか。
2017/08/11(金) 10:54:58.16ID:MAQPQwLn
新しい変数を使うのじゃダメなの??
既存の変数のサイズを変えないといけない場面が分からないんだけど
2017/08/11(金) 11:02:06.75ID:SqwigL4Y
おまえもだと思うけど、そこまで難しい話しても理解できないでしょ
2017/08/11(金) 15:26:52.99ID:Rv0iJ0O8
>>702
vector<int> vec(10);
vec = vector<int>(20);
というコードを書いたときに変数とオブジェクトの関係はどうなっているか、というレベルの話なので、C++をまずは勉強したほうがいい。
2017/08/16(水) 10:23:21.36ID:GzC89dk5
C++の勉強では、newと書くことになってるでしょ?
いやだから、どうなっているか教えて?
2017/08/16(水) 15:19:37.66ID:Ljo9giCK
頭悪いんだから大人しくpython使いなさい
2017/08/17(木) 01:06:40.35ID:e+gexvbV
>>706
newと書くことが必ずしも必要なわけではない。そして、コピーしたいときに=で済むか、cloneメソッド的なものを呼ばないといけないかは、クラスの作りによる。
続けるとスレチになるし、おそらく現状の理解からvectorの例までを理解するのにはそれなりにやりとりが必要になるような気がするので、詳しくはC/C++初心者スレッドみたいなところで質問してほしい。
2017/08/17(木) 02:17:20.86ID:PTK6O3Ph
つかマジでvectorのサイズ変えるくらいなら新しい変数作ればよくね?
2017/08/17(木) 08:27:33.84ID:uDwfQQpB
>>708

おまえ馬鹿じゃね?

おまえの書いてる時点で、vectorとのメモリ管理が違うことが明確になってるだろ。

それが分からないなんて、知能がたりない。
2017/08/17(木) 08:38:10.08ID:Rjw/N7cG
2chのプログラム関連はそんなもんだろ
それが分からないなんて、知能がたりない
2017/08/17(木) 08:58:46.16ID:uDwfQQpB
知能がたりないかどうかは、一旦保留にしておいて、、、

vectorのメモリ管理とMatのメモリ管理が明確に違うんだから、
cloneいるかいらないか、の判断の道筋を明確にして欲しいです。


>mt = cv::Mat(height*2, width, CV_8U);
みたいな書き方をvectorでやると、
スコープ抜けると、実態が吹っ飛ぶと思うんですが。

Matは参照カウントか何か細工してますか?
2017/08/17(木) 09:00:17.65ID:uDwfQQpB
>>709

クラス変数にしてるので、そうできない局面で。
2017/08/17(木) 10:37:36.74ID:Rjw/N7cG
> mt = cv::Mat(height, width, CV_8U).clone()
これを分かりやすく展開したらこんな風に二度newした挙句memcpyまでするだろ
tmp = new byte[height*width*CV_8U];
ZeroMemory(tmp, sizeof(tmp));
mt = new byte[sizeof(tmp)];
memcpy(mt, tmp, sizeof(tmp);
メモリ管理連呼してるくせにメモリ管理まったくわかってないんじゃないか
2017/08/17(木) 10:51:32.35ID:uDwfQQpB
あ、そうなの?

.cloneしなかったら、
右辺はnewしないので、
スコープ抜けたら右辺の実態は消えるということ?

なら、.clone必要になるんですが。
2017/08/17(木) 10:58:32.69ID:LViMArV/
Mat mt(height, width, CV_8U);
Mat new_mt(new_height, new_width, CV_8U);
mt = new_mt.clone();

これじゃダメなの??
2017/08/17(木) 11:07:08.77ID:Rjw/N7cG
じゃ必要だな。使っとけ
2017/08/17(木) 11:20:36.76ID:uDwfQQpB
クラス変数: Mat mt(height, width, CV_8U);

としたとき、

Mat new_mt(new_height, new_width, CV_8U);
mt = new_mt.clone();

で、cloneの有る無しで、メモリ管理は、どうなりますでしょうか。
2017/08/17(木) 11:21:15.48ID:JrjUJCSV
どうも質問者はC++とJavaをごっちゃにしてる感あるな
2017/08/17(木) 11:25:00.41ID:JrjUJCSV
>>718


Mat mat(h, w, CV_8U);

mat2 = mat; //mat2.data は mat.data と共有されてるので mat2 を変更すると mat も変更される

mat3 = mat.clone(); //この時点でmat3の内容は mat と全く同じだがmat3はmat から独立してるので
             //mat3 に何をしてもmat には反映されない
2017/08/17(木) 11:38:41.34ID:e+gexvbV
>>710
vectorがどうしてcloneを呼ばなくていいか、Matでcloneを呼ばなきゃいけないときはどういうときか、そういうのを把握するためにC++のクラスの基礎的な理解が必要だって言ってるんだけど。
vectorがどうして呼ばなくていいか(どういう処理が実際に行われてるか)わかるようになればMatでどうすればいいかはソース読むか簡単な実験すればわかる
別に馬鹿にしてるわけでもないのに馬鹿だの知能が足りないだの短気なやつだな。
2017/08/17(木) 11:44:42.00ID:uUKVNIMC
>>712
vectorでやってもおかしくならないよ。
2017/08/17(木) 12:02:48.59ID:uDwfQQpB
>>722

おま、頭悪いなー。

vectorだと内容をコピー、
Matだと内容を共有。

動作の違いだと、なんどいったら、小一時間、、、
2017/08/17(木) 12:17:18.50ID:QOcYPa3W
>>723
リファレンスやソース読めばその動作の違いはわかるよ
もちろん問題なく使い分け出来てるけど、それが出来ないのは頭が悪いからなのでは?w
2017/08/17(木) 13:33:11.05ID:uDwfQQpB
>>724

しつこいんだけど。

バカなの?市ぬの?
2017/08/17(木) 13:49:21.19ID:Rjw/N7cG
一連の流れで一番賢かったのは>>707だな。だめだコイツ
2017/08/17(木) 13:53:18.54ID:uDwfQQpB
Pythonで
import cv2
したら
SAMEプロブレムになるのでわ?
2017/08/17(木) 14:29:50.95ID:uDwfQQpB
>mat2 = mat; //mat2.data は mat.data と共有されてるので mat2 を変更すると mat も変更される

ここで、matがローカル変数で、mat2がクラス変数(つまり永続)のとき、
matがスコープ抜けた時って、
共有されているので、mat2の中身も変更(この場合、実態が破棄)されるということでしょうか。

それとも、そうならないようにOpenCVの中で工夫してくれているので、考えなくて良いのでしょうか。
2017/08/17(木) 16:55:00.33ID:JrjUJCSV
>>728
内部実装で参照カウンティングが使われていてれば問題なく mat2 を
使い続けられるだろうけどウィロウガレージの中の奴らを信頼するべきじゃない
(基本ゴミ)なので危なそうな使い方は最初から避けるのが無難
2017/08/17(木) 17:02:48.62ID:uDwfQQpB
了解です。
無駄なステートメントになったとしても、.cloneを使うことにします。

参照カウンティング〜ということは、OpenCVのベース部分にガベコレが何らか実装されているということですね。
2017/08/17(木) 21:16:47.77ID:vpgYUhkf
だから最初から大人しくclone使えばいいって言ったやんけ
少しくらい量が多くなっても大して変わらん、メモリ管理ガーとか言ってる時間の方が無駄
2017/08/18(金) 12:07:02.89ID:eIpnBeVf
>>706
嫌なら new を再定義
2017/08/18(金) 15:39:27.28ID:EZSlBiH3
いや、そのりくつはおかしい。

動作が分かったうえで、
余分な処理を明示的に書くのならおkですが、
そうでなければ、
メモリリークだらけ!!!
で、かつ原因不明!!!!!
調べようもない。
2017/08/18(金) 19:18:01.96ID:/zjZyZlS
基本的なことを押さえようとしないで最終的な方法だけショートカットして知ろうとしてるみたいだし、とりあえず1発なんとなく動けばいいレベルのプログラムが出来ればいいって考え方なんじゃないのかな

そういうことが必要な状況もあるだろうから、否定はしないが
2017/08/19(土) 15:22:28.74ID:vQyZjPpv
いやならC使えよ
2017/09/02(土) 01:09:37.90ID:/3mdn3Bp
初心者です。
今png画像からHoughCirclesで円を検出しているのですが、png画像で検出出来なくてもjpg画像にすると円を検出出来ることが度々あるのですが理由など分かりますか?

画像処理で精度求めるなら可逆圧縮のpngなど使うのが良いと思ってたので混乱してます。
2017/09/02(土) 18:51:13.79ID:AmWVvi8J
>>736
それぞれのファイル形式でimreadしたときに、どんなMatが出てきてるか確認してる?同じようなものならHough変換の結果もそんなに変わらないはず。
2017/09/03(日) 16:52:49.56ID:QyuO11e3
求 ソースコードと2種の画像ファイル
2017/09/03(日) 22:05:13.04ID:l2VSYqMz
ノイズを除去してないからだろ
2017/09/06(水) 18:11:42.76ID:gNGLiUGh
>>736
超能力でアレすると,アルファチャンネル付きのpngを扱ってるのが原因かも
OpenCVはアルファチャンネルの画像の扱いがおかしい(ことがある)。
2017/09/21(木) 11:43:21.80ID:YvwuVHPl
ttp://rad-base.com/wp-content/uploads/2015/08/005_ph04.jpg
こういった感じで、ある範囲のピクセル値を持つ領域を、
外側(青)と内側(赤)に自動で分けたいのだけど、
OpenCVとか使うとできるものですか?
2017/09/21(木) 12:27:46.38ID:1bEsMVa+
ある範囲のピクセル値を持つ領域

この定義によってはできるし、できない
2017/09/21(木) 12:38:23.44ID:x6ZzXJvX
どうやってコンピュータに理解させるかだわな
2017/09/21(木) 12:52:28.53ID:4eUYxuUw
ロバスト性考慮しなかったらadaptiveThreshold使えば5分でできる
2017/09/21(木) 13:15:37.25ID:YvwuVHPl
>>742-744
ありがとうございます。

ttp://www.hatchobori.jp/asset/naizoushibou.gif
説明不足でしたが、要はこういうことをしたいわけで。
(内側と外側は、同じ範囲のピクセル値)

adaptiveThresholdという関数もありがとうございます。
OpenCVを調べてみようかと思います。
2017/09/21(木) 15:10:39.94ID:pZ67HTqZ
Xcode で openCV動かしの民なんだか
今回のアプデでOpenCV動かんくなった もちソースに変更なし
解決方法しってる博識おらんか?
2017/09/21(木) 15:12:39.22ID:Rn57IsrY
だいたい医療画像って確か周波数領域で扱うもんだったでしょ?
フーリエ変換してフィルタかけるとかの方がいいんじゃね?知らんけど
2017/09/21(木) 15:14:22.21ID:Rn57IsrY
>>746
1.前ソースに戻す
2.動けば解決で修正とかパッチなり待てばよい
3.動かなければアプデのせいじゃないのでドンマイ
2017/09/21(木) 15:23:01.98ID:pZ67HTqZ
>>748
そ〜す変えてないから修正待ちするわ うんち サンクス
2017/09/21(木) 15:45:53.27ID:0Ii6MUxg
>>749
そ〜すってOpenCV自体のソースのことじゃ無いの?
OpenCVを以前のバージョンに戻してみるって話でしょ。
2017/09/21(木) 16:03:20.26ID:Rn57IsrY
それ
ついでに、望みはそんなにないけどまあヒントくらいはもしかしたら与えてやれるかも知れないから具体的にどう動かないのか教えてみて。
2017/09/21(木) 18:17:31.79ID:gMObALxl
本探してもC++で解説してるやつばっかりやな pythonで解説書いてるやつで初心者にも分かりやすいやつ教えてくれ
2017/09/21(木) 19:11:25.47ID:vYu+noTX
割りとまじめに先にgoogleの使い方覚えたほうがいいと思うよ
覚えたら本買う気なんてなくなるから
2017/09/21(木) 20:49:19.64ID:djJph1z5
>>751
OpenCVのバージョンも何も、変わらず
ついこないだまでやってたXcodeプロジェクトをXcode 9.0にしたらエラー吐くようになったの
画像どこにうpすればいいかわからんからこれで勘弁して
https://drive.google.com/open?id=0B1gQp0SqZRp6UnZoVlVxcGZKYlU
ちょっとググったらシンボリックリンク貼り直せだの(やったけど治らん)
brew doctorしたら pruneしろだの 言われて打ったけど動かない…
学生なんでこれ使えないと割と困るんでヘルプお願いします…><
2017/09/21(木) 21:23:31.99ID:vYu+noTX
opencvなんも関係ないだろw
もっとちゃんとエラー見ろよ
2017/09/21(木) 21:40:35.95ID:Rn57IsrY
卒研かーい
そして、プログラム君がimage not foundって思いっきり訴えてきてるけど?
2017/09/21(木) 21:41:56.41ID:Rn57IsrY
>>752
基本的には何も変わらないよ
あるとしたら、numpyの知識が若干欲しいくらい、それさえ覚えれば大体のことはどうとでもなる
2017/09/21(木) 22:05:41.85ID:djJph1z5
そのimage not found の訴えの退け方がわからnいっす
2017/09/21(木) 22:20:43.69ID:vYu+noTX
www
2017/09/22(金) 03:18:08.30ID:fjr8SzvJ
・・・何だろう・・・社会に出ちゃっていいのかな・・・?
2017/09/22(金) 12:32:35.88ID:rbqMopce
>>753
そう思っていた時期がわたしにもありました
2017/09/22(金) 15:14:03.43ID:W/9VGrE5
OpenCV使わずに自力で書いた方が早い気もするw
2017/09/23(土) 08:35:19.56ID:5Hpz6Jfl
spyder使ってるんだけどwebカメラ起動するコード書いて実行するとフリーズするんだけど軽くする方法教えて
2017/09/23(土) 08:45:21.28ID:u4bHlQKH
どうせそのコードが悪いんだろ。エスパーじゃなきゃわからん
2017/09/23(土) 09:22:06.18ID:3cuY+qEf
まずはコードをうぷれ
2017/09/23(土) 11:03:29.94ID:W5G2i5Oo
>>762
そう思ってた時期が俺にもありました
2017/09/24(日) 14:57:29.04ID:EP+fvRXu
>>763
だけど https://www.messiahworks.com/archives/7852 このサイトのコードです
2017/09/24(日) 15:16:29.64ID:EP+fvRXu
何回かやったらカメラは起動できたけど顔は認識されないしグレースケールにもなってない、、
2017/09/24(日) 15:24:39.90ID:KdVNcd4v
数行しかないんだから何やってるか読めよ
2017/09/24(日) 20:38:19.42ID:nbM/UkzU
>>767
while で意図的に無限ループ作るやつは所々 sleep 入れると動くこともある
2017/09/25(月) 11:23:45.06ID:8qLoQ9vT
カメラのfps内でsleep入れた方がいいよな
画像取得するまでひたすら無限ループをブン回すのは暴走の元
2017/09/25(月) 12:04:53.81ID:JnK94/2y
こういう糞なテストコードをまともに動く形に持って行くのって大変だよな
2017/09/25(月) 15:57:29.86ID:DS9STyAc
ウェイトを入れないのもどうかと思うけど、
イベント通知やら何やらの仕組みが無いのも問題っちゃー問題ではあるんだよな
2017/09/25(月) 21:59:03.88ID:aRrgPtbQ
嫌なら使うな
2017/09/26(火) 01:10:29.20ID:SlBInbkD
嫌 != 大変 != 問題
2017/10/07(土) 21:15:49.05ID:taSaJaQU
画像内に写る要素の微小領域を統合したい
どうすれば統合できるかな?

今はラベリングでやろうとしてるけどそれ以外の方法もあるのかな?
2017/10/07(土) 21:44:58.48ID:VGyrO9v6
>>776
バラバラに散らばった領域を太らせて一個の領域にするということ??
言ってることがよくわからないな
2017/10/07(土) 22:34:36.02ID:taSaJaQU
>>777
隣り合ってるような微少領域要素を統合していって大まかなラベル分けをしたい
2017/10/08(日) 07:50:51.35ID:22ZPOjtu
統合とラベリングって割と相反する概念だと思うんだけど
2017/10/08(日) 09:18:49.15ID:00HukpVD
こういう緑の線みたいな感じで領域統合して大まかなラベルつけたい

なんかないかな
2017/10/08(日) 09:31:06.07ID:ZliA/0nd
どういうルールで小さいやつはどちらに分けるか決めるの?
2017/10/08(日) 10:02:37.04ID:00HukpVD
特徴が類似してるほう
2017/10/08(日) 19:10:35.72ID:mjOcXoyF
特徴を決める尺度により過ぎるとしか。
画像みたいに近いものでまとめるなら物体毎の重心点でk平均取るとかでいいやろうけど。
2017/10/10(火) 06:25:27.23ID:MWrCwf/c
>>776
こういうやつ?

http://docs.opencv.org/3.0-last-rst/modules/ximgproc/doc/superpixels.html

サンプルでは背景からクマを分離してるけど
2017/10/10(火) 07:42:25.30ID:E6iIl46r
>>784
そうそうこういう感じ!
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況