前提・実現したいこと
ここに質問の内容を詳しく書いてください。
C++で任意の階調にポスタリゼーションするプログラムを作っています。下記のプログラムを実行すると一応ポスタリゼーションはできているようなのですがそのポスタリゼーション後の画像がなぜか三分の一しか表示されず残りは真っ黒です。何故なのか教えていただけましたら幸いです。
発生している問題・エラーメッセージ
出力画像が3分の1しかポスタリゼーションされず残りは真っ黒になってしまいます。
該当のソースコード
ソースコード
include <stdio.h>
include <iostream>
include <opencv2/opencv.hpp>
define FILE_NAME "../Debug/test.jpg"
define WINDOW_NAME_INPUT "input"
define WINDOW_NAME_OUTPUT "output"
define COLOR_NUM (256) //色値
int main(int argc, const char * argv[]) {
//scanfで指定階調を取得
int num;
printf("指定したい階調を入力してください。\n");
scanf("%d",&num);
//画像の入力 int x, y; cv::Mat src_img = cv::imread(FILE_NAME); if (src_img.empty()) { //入力失敗の場合 return (-1); } //出力画像メモリ確保 cv::Mat dst_img = cv::Mat(src_img.size(), CV_8UC3); //ルックアップテーブル uchar lut[COLOR_NUM]; for (int i=0; i<COLOR_NUM; i++) { //ポスタリゼーション lut[i] = (i / (COLOR_NUM / num)) * (COLOR_NUM / num); } //画像の走査 //縦 for (y=0; y<dst_img.rows; y++) { //横 for (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::imwrite("test.png", dst_img); cv::waitKey(); //キー入力待ち (止める) return 0;
}
試したこと
ここにより詳細な情報を記載してください
回答1件
あなたの回答
tips
プレビュー