C++です。Pタイル法で画像を二値化します。(P=10%)
対象画像の輝度ヒストグラムは求めることができたと思うのですが、ここからどう書けばいいのかわからなくなってしましました。何かご教示いただければ幸いです。
c++
1#include<opencv2/opencv.hpp> 2 3#define FILE_NAME "../Debug/a_img.jpg" 4 5//ウィンドウ名 6#define WINDOW_NAME_INPUT "input" 7#define WINDOW_NAME_OUTPUT "output" 8 9int main(int argc, const char * argv[]){ 10 int i,hist[256],x,y; 11 12 //画像をグレースケールで入力 13 cv::Mat src_img=cv::imread(FILE_NAME,0); 14 if(src_img.empty()){//ファイルが開けなかった場合 15 fprintf(stderr,"File is not opened\n"); 16 return(-1); 17 } 18 19 //ヒストグラム用の配列の初期化 20 for(i=0;i<256;i++){ 21 hist[i]=0; 22 } 23 //出力画像のメモリ確保 24 cv::Mat dst_img = cv::Mat(src_img.size(),CV_8UC1); 25 26 //線形変換(入力画像、出力画像) 27 for(y=0;y<src_img.rows;y++){ 28 for(x=0;x<src_img.cols;x++){ 29 //画素値の取得 30 unsigned char s = src_img.at<unsigned char>(y,x); 31 hist[(int)s]++;//画素値の計算 32 33 34} 35 } 36 37 //出力 38 for(i=0;i<256;i++){ 39 printf("%d\n",hist[i]); 40 } 41 42 //画像表示 43 cv::imshow(WINDOW_NAME_INPUT,src_img); 44 cv::imshow(WINDOW_NAME_OUTPUT,dst_img); 45 cv::waitKey(); 46 47 return 0; 48 49 } 50
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/16 09:38
2020/06/16 10:55
2020/06/16 11:22
2020/06/16 11:46
2020/06/16 12:44
2020/06/17 00:55
2020/06/17 03:25
2020/06/17 04:15
2020/06/17 04:49 編集
2020/06/17 05:47
2020/06/17 06:34