vc2013 WINコンソールアプリケーション 空のプロジェクト
プロジェクト→新しい項目の追加→C++
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <fstream>
#include <iostream>
#include <sstream>
#define _USE_MATH_DEFINES
#include <cmath>
#include <math.h>
#include <stdio.h>
using namespace cv;
using namespace std;
string address, csvname;
int i, swi = 0, cnt;
double pixel, CircleLevelmax;
void PAINT(Mat& grey_img, Mat& paint_img, int& i);
void PIXEL_COUNT(const Mat& gray_img, Point2f& center, float& radius, int& cnt);
int main(int argc, char *argv[])
{
double greenS, greenL, CL;
int a = 0;
Mat chan[3], src_img, findC_img, paint_img, paint1_img, gray_img, canny_img, gau_img, R_img, G_img, B_img, end_img;
ofstream ofs("C:/Users/esel/Documents/hujihara/testpicture.jpg");
switch (swi){
case 0:
{
//白黒で読み込み
gray_img = imread(address + ".JPG", 0);
imwrite(address + ".JPG", gray_img);
//カラーで読み込み
src_img = imread(address + ".JPG", 1);
//RGB分解
split(src_img, chan);
//R値画像
R_img = chan[2];
imwrite(address + ".JPG", R_img);
//R値画像ガウシアンフィルタ処理
GaussianBlur(chan[2], gau_img, Size(5, 5), 5, 5);
//Canny法
Canny(gau_img, canny_img, 50, 150, 5, true);
imwrite(address + ".JPG", gau_img);
imwrite(address + "JPG", canny_img);
//中塗りから保存まで
PAINT(canny_img, paint_img, i);
findC_img = paint_img.clone();
paint1_img = paint_img.clone();
}
break;
default:
{
//白黒で読み込み
paint_img = imread(address + ".JPG", 0);
findC_img = paint_img.clone();
paint1_img = paint_img.clone();
}
break;
}
//カラーで読み込み
end_img = imread(address + ".JPG", 1);
//輪郭の検出
vector<vector<Point> > contours1;
vector<Vec4i> hierarchy1;
//2値が憎悪,輪郭(出力),階層構造(出力),輪郭抽出モード,輪郭の近似手法
findContours(findC_img, contours1, hierarchy1, RETR_EXTERNAL, CHAIN_APPROX_NONE);
for (int j = 0; j < contours1.size(); j++)
{
//円形度
greenS = contourArea(contours1[j]);
greenL = arcLength(contours1[j], true);
if (greenL == 0){ goto FLAG; }
CL = 4.0*M_PI*greenS / (greenL*greenL);
//計測上限指定
if (CL > 0.57)
{
cnt = 0;
//撮影画像の分解能
pixel = 0.612;
//外接円の中心と半径
Point2f center;
float radius;
minEnclosingCircle(contours1[j], center, radius);
//カメラについているごみとり.ごみの座標を事前に調べておく
//if (7960 <= center.x <= 7963 && 1620 <= center.y <=1623 && 10 <= radius <= 13){ goto FLAG; }
try
{
PIXEL_COUNT(paint1_img, center, radius, cnt);
}
catch (cv::Exception& e){
goto FLAG;
}
double R_cnt = sqrt((double)cnt / M_PI);
double D_cnt = 2.0*R_cnt*pixel;
double Radi_circle = R_cnt;//描く用のpixel半径
//ファイル書き込み
ofs << D_cnt << "," << center.x << "," << center.y << endl;
double val = D_cnt;
string str = to_string(val);
//円の描写
circle(end_img, center, (int)Radi_circle, Scalar(200, 0, 0), -1, 8, 0);
int face[] = { FONT_HERSHEY_SIMPLEX };
//液滴直径の描画
putText(end_img, str, Point(center.x, center.y), face[0], 3, Scalar(200, 200, 200), 3, CV_AA);
a = a + 1;
}
FLAG:;
}
//結果書き込み
imwrite(address + ".JPG", end_img);
//液滴検出数
ofs << endl << ",num of contours," << a << endl;
return 0;
}
void PAINT(Mat& gray_img, Mat& paint_img, int& i)
{
//膨張
Mat BOUTYOU_img, SYUKU_img;
dilate(gray_img, BOUTYOU_img, Mat(), Point(-1, -1), 10);
//輪郭の検出
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
//2値画像,輪郭(出力),階層構造(出力),輪郭抽出モード,輪郭の近似手法
findContours(BOUTYOU_img, contours, hierarchy, RETR_TREE, CHAIN_APPROX_NONE);
//輪郭の描画
//画像,輪郭,描画輪郭指定インデックス,色,太さ,種類,階層構造,描画輪郭の最大レベル
drawContours(BOUTYOU_img, contours, -1, Scalar(250, 250, 250), -1, 8, hierarchy, 1);
//収縮
erode(BOUTYOU_img, paint_img, Mat(), Point(-1, -1), 10);
//保存
imwrite(address+".JPG, paint_img);
}
エラー 8 error LNK2019: 未解決の外部シンボル "void __cdecl cv::fastFree(void *)" (?fastFree@cv@@YAXPAX@Z) が関数 "public: __thiscall cv::Mat::~Mat(void)" (??1Mat@cv@@QAE@XZ) で参照されました。
:
上のようなエラーが合計22件発生してしまいます.
プログラミングのソースコードは前使われていたものなので動くと思うのですが,全くわかりません.
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
>違うPCで使われていました
現PCにopencvはインストールしてある…んですよね?
# まぁ、ヘッダファイルがあるなら入っているんでしょう。ヘッダだけコピーした…とかでなければ。
>一応VC++のインクルードディレクトリに下のソースコードのエラーが出ないようにいろいろと貼り付けましたが,このことでしょうか?
それらのヘッダで「このソースコードじゃないけど『どっか』にこんな関数があるよ」とコンパイラに教えています。
なので、リンカが「よっしゃ、ライブラリから必要にモン持ってきて1つの実行ファイルにするで~」とやろうとしましたが…
「あんちゃん、必要なモンがないやんけ!」と言っています。
ってことで、リンカの設定にある「追加のライブラリ」にopencvのライブラリを指定する必要があります。
# 具合的なファイル名はopencv使ったことないので知りません。
「VisualStudio opencv ライブラリ」辺りで検索して下さい。
あるいは「動いていた」というPCに入っているプロジェクトの設定を参照する…とかでしょうか。
No.1
- 回答日時:
>プログラミングのソースコードは前使われていたものなので動くと思うのですが
同じPCで動作していた。
ってことでしょうか?
で、opencvのライブラリはリンクするように設定済んでいるんですよね?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- Perl 画像が表示でnull; this.src 1 2022/04/19 11:31
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- その他(プログラミング・Web制作) pythonで、tkinterとpillowの組み合わせ 2 2022/08/16 17:42
- HTML・CSS CSSがなぜかfont-sizeだけ効かない...記述がまちがっているんでしょうか 5 2022/04/09 17:52
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
OpenCV での画素値の比較について
-
色の変更
-
リンク先を動的に変更する
-
libjpegライブラリの使い方につ...
-
画像が表示でnull; this.src
-
指定したフォルダの画像を一括...
-
MAX関数を使ってからLEFT JOIN...
-
スタイルシートで画面を上下に...
-
JavaScript スライドの画像にリ...
-
textareaに画像を表示したい
-
アコーディオンメニューの開閉制御
-
javascriptでスタイルを動的に...
-
キャラクターがぴょこんと飛び...
-
HTMLで条件分岐はできますか?
-
Ctrl+F(検索)の窓を出したいの...
-
javascriptで、クリックしたら...
-
c++std::string型をTCHARに変換...
-
URL末尾に特定の文字を含む場合...
-
【jQuery】複数の画像の読み込...
-
eclipseでcssを使うためには?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JavaScriptで変更した属性の元...
-
MFCで画像を表示させているので...
-
画像が表示でnull; this.src
-
error LNK2019 未解決のシンボ...
-
(javascript)HTMLで指定した...
-
外部javascriptの重複を防ぐには
-
libjpegライブラリの使い方につ...
-
Vb.net2005での画像の合成方法
-
外部ファイルにしたら文字化け...
-
jQuery 複数のfind()
-
HTMLからimgのsrcのみを正規表...
-
html内にスライドショーを複数設置
-
条件分岐でキーが入力されてい...
-
複数画像のランダム複数表示(...
-
ダイアログから画像ファイルは...
-
【OpenCV】二値画像後、白の部...
-
"lightbox"の"CLOSE"ボタンクリ...
-
onclickで画面が固まる・・・ら...
-
pythonで、tkinterとpillowの組...
-
imgボタンにfocusの当て方
おすすめ情報
回答ありがとうございます.
違うPCで使われていました.ですので動作環境の問題だとおもっているのですが全くわかりません.
一応VC++のインクルードディレクトリに下のソースコードのエラーが出ないようにいろいろと貼り付けましたが,このことでしょうか?
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
ビルド→構成マネージャー→アクティブソリューションプラットフォームをx64に書き換えるとエラーが一つになりました.
エラー 1 error LNK2019: 未解決の外部シンボル "void __cdecl PIXEL_COUNT(class cv::Mat const &,class cv::Point_<float> &,float &,int &)" (?PIXEL_COUNT@@YAXAEBVMat@cv@@AEAV?$Point_@M@2@AEAMAEAH@Z) が関数 main で参照されました。