実現したいこと
入力した階調数に応じてLUTでポスタリゼーションを行うプログラム
前提
ここに質問の内容を詳しく書いてください。
(例)
階調数を指定すると,その階調数に対応したルックアップテーブルを作成し,そのLUTでポスタリゼーションを行うプログラム。(scanfで入力指定をする。)
該当のソースコード
c++ openCV
ソースコード
// OpenCV用のヘッダファイル #include <opencv2/opencv.hpp> //画像ファイル (サイズは小さめが良い) #define FILE_NAME "./fruit_image.jpg" #define WINDOW_NAME_INPUT "input" #define WINDOW_NAME_OUTPUT "output" #define COLOR_NOM (256) int main(int argc, const char * argv[]) { int n; //画像の入力 cv::Mat src_img; //画像の型と変数 src_img = cv::imread(FILE_NAME, cv::IMREAD_GRAYSCALE); //画像の読み込み if (src_img.empty()) { //入力失敗の場合 fprintf(stderr, "読み込み失敗\n"); return (-1); } cv::Mat dst_img = cv::Mat(src_img.size(), CV_8UC1); uchar lut[COLOR_NOM]; scanf("%d",&n); for (int i=0; i<COLOR_NOM; i++) { if (i<= 63) { lut[i]=0; }else if (64<= i && i<= 127){ lut[i]=85; }else if (128<= i && i <=191){ lut[i] = 170; }else{ lut[i] = 255; } } for (int y=0; y<dst_img.rows; y++) { for (int x=0; x<dst_img.cols; x++) { uchar s = src_img.at<uchar>(y,x); dst_img.at<uchar>(y,x) = lut[s]; } } cv::imshow(WINDOW_NAME_INPUT, src_img); cv::imshow(WINDOW_NAME_OUTPUT,dst_img); cv::waitKey(); //キー入力待ち (止める) return 0; } ### 試したこと if文を何度もいじってみたが上手く出来なかった
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。