識別子が見つからないエラー
Posted: 2015年9月25日(金) 20:47
画像の色領域を抽出するプログラムを作成したいです。(赤だけ抽出してあとは黒表示するなど)
ネット上にあるサンプルプログラム等参考にしながら下記プログラムを書いてみましたが、
error C3861:'colorExtraction':識別子が見つかりませんでした
と出てうまくいきません。
関数の引数渡しがうまくいっていないのかと思うのですが
C++プログラム初心者でこのエラーの解決法がわからないのでご教授願えればと思います。
環境は
OS : Windows、VS2013、C++、openCV2.4.9
です。
初歩的なところでつまずいているのかもしれず、大変申し訳ないのですがよろしくお願いいたします。
以下、ソースコードです。
ネット上にあるサンプルプログラム等参考にしながら下記プログラムを書いてみましたが、
error C3861:'colorExtraction':識別子が見つかりませんでした
と出てうまくいきません。
関数の引数渡しがうまくいっていないのかと思うのですが
C++プログラム初心者でこのエラーの解決法がわからないのでご教授願えればと思います。
環境は
OS : Windows、VS2013、C++、openCV2.4.9
です。
初歩的なところでつまずいているのかもしれず、大変申し訳ないのですがよろしくお願いいたします。
以下、ソースコードです。
#include <iostream>
#include "opencv2\opencv.hpp"
int main(int argc, char *argv[])
{
cv::Mat origImage = cv::imread("Color.png");
cv::Mat extractedImage;
cv::imshow("Color Image", origImage);
colorExtraction(&origImage, &extractedImage, CV_BGR2HSV, 50, 70, 80, 255, 0, 255);
cv::imshow("Extract Image", extractedImage);
cv::waitKey(0);
return 0;
}
void colorExtraction(cv::Mat* src, cv::Mat* dst,
int code,
int ch1_lower, int ch1_upper,
int ch2_lower, int ch2_upper,
int ch3_lower, int ch3_upper
){
cv::Mat color_Image;
int lower[3];
int upper[3];
cv::Mat lut = cv::Mat(256, 1, CV_8UC3);
cv::cvtColor(*src, color_Image, code);
lower[0] = ch1_lower;
lower[1] = ch2_lower;
lower[3] = ch3_lower;
upper[0] = ch1_upper;
upper[1] = ch2_upper;
upper[2] = ch3_upper;
for (int i = 0; i < 256; i++){
for (int k = 0; k < 3; k++){
if (lower[k] <= upper[k]){
if ((lower[k] <= i) && (i <= upper[k])){
lut.data[i*lut.step + k] = 255;
}
else{
lut.data[i*lut.step + k] = 0;
}
}
else{
if ((i <= upper[k]) || (lower[k] <= i)){
lut.data[i*lut.step + k] = 255;
}
else{
lut.data[i*lut.step + k] = 0;
}
}
}
}
//LUTを使用して二値化
cv::LUT(color_Image, lut, color_Image);
//Channnelごとに分解
std::vector<cv::Mat>planes;
cv::split(color_Image, planes);
//マスクを作成
cv::Mat maskImage;
cv::bitwise_and(planes[0], planes[1], maskImage);
cv::bitwise_and(maskImage, planes[2], maskImage);
//出力
cv::Mat maskedImage;
src->copyTo(maskedImage, maskImage);
*dst = maskedImage;
}