タイトルにあることを、circle関数などを用いずに実装したいです。
基本的なコードは以下の通りです。
#include <stdio.h> #include <iostream> #include <opencv2/opencv.hpp> //画像ファイル (小さめが良い) #define FILE_NAME "../Debug/aquarium.jpg" #define WINDOW_NAME_INPUT "input" #define WINDOW_NAME_OUTPUT "output" int main(int argc, const char * argv[]) { int x, y; //画像の入力 cv::Mat src_img = cv::imread(FILE_NAME); if(src_img.empty()) { ////入力失敗の場 fprintf(stderr, "読み込み失敗\n"); return (-1); } int center_x = src_img.cols/2; // 横座標の中心 int center_y = src_img.rows/2; // 縦座標の中心 //出力画像のメモリ確保 cv::Mat dst_img = cv::Mat(src_img.size(), CV_8UC3); //画像の走査 for (y=0; y<src_img.rows; y++) { for (x=0; x<src_img.cols; x++) { //画素値の取得 cv::Vec3b s = src_img.at<cv::Vec3b>(y, x); if (// 赤色にする画素を特定したい...) { s[0] = 0; //B s[1] = 0; //G s[2] = 255; //R } else { s[0] = s[0]; //B s[1] = s[1]; //G s[2] = s[2]; //R } dst_img.at<cv::Vec3b>(y, x) = s; } } cv::imshow(WINDOW_NAME_INPUT, src_img);//画像の表示 cv::imshow(WINDOW_NAME_OUTPUT, dst_img);//画像の表示 cv::waitKey(); //キー入力待ち (止める) return 0; }
試したこと
if文の中(コメント「赤色にする画素を特定したい...」)の部分を
std::pow(x-center_x, 2) + std::pow(y-center_y, 2) == std::pow(100, 2)
としたところ、赤色の画素が少しあって、その画素を結ぶと円の形になるのですが、思っていたようにはなりませんでした。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/27 04:56
2021/04/27 05:05
2021/04/27 05:09