私のプロジェクトには助けが必要です。私はディスクからカラー画像(ソース画像)を読みました。私の仕事はこの画像にぼかしを適用することです。したがって、添付された画像(左上隅の画像 - エッジ画像)のように、エッジの検出には問題はありません。 関連する質問の4つのステップを適用しました thisとthisCv :: Mat画像のみをぼかす方法Canny関数がOpenCVでこの画像のエッジを検出する場所
添付の画像に表示されているように、手順1〜3は間違いなく可能です。第1の画像は検出されたエッジを示し、第2の画像は拡大された前の画像を示し、第3の画像はぼやけた第2の画像を示し、ソース画像をこの画像にコピーする。しかし、最後のステップでは、この画像を最終画像(ソース画像)にコピーして、検出されたエッジがぼやけてしまうようにしたいと考えています。しかし、私がOpenCVライブラリからcopyTo関数を使用すると、結果は画像の結果(右下隅の画像)で見ることができるように、Canny関数が検出するぼかしエッジを持たない。私がやっていることを喜ばせてくれますか?
#include <cstdlib>
#include <iostream>
#include <QCoreApplication>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
Mat src, src_gray;
Mat detected_edges;
Mat blurred;
int edgeTresh = 1;
int lowThreshold;
int const max_lowThreshold = 100;
int ratio = 3;
int kernel_size = 3;
char* window_name = "Edge Image";
char* window_name2 = "Dilated";
char* window_name3 = "Blurred";
char* window_name4 = "Result";
void CannyThreshold(int, void*)
{
//reducing noise
blur(src_gray, detected_edges, Size(3,3));
//Canny function for detection of edges
Canny(detected_edges,detected_edges, lowThreshold,lowThreshold*ratio, kernel_size);
//show detected edges in source image
imshow(window_name, detected_edges);
//4 steps from stack owerflow
dilate(detected_edges, blurred, Mat()); //1
imshow(window_name2, blurred);
src.copyTo(blurred,blurred); //2
blur(blurred, blurred ,Size(10,10)); //3
imshow(window_name3, blurred);
//here can by a problem when I copy image from step 3 to source image with detected_edges mask.
blurred.copyTo(src,detected_edges); //4
imshow(window_name4, src); //final image
}
int main(int argc, char *argv[])
{
//reading image
src = cv::imread("/home/ja/FCS02/FCS02_3/imageReading/drevo.png");
if(!src.data)
return -1;
//convert to gray
cvtColor(src,src_gray,CV_BGR2GRAY);
//windows for showing each step image
namedWindow(window_name,CV_WINDOW_NORMAL);
namedWindow(window_name2,CV_WINDOW_NORMAL);
namedWindow(window_name3,CV_WINDOW_NORMAL);
namedWindow(window_name4,CV_WINDOW_NORMAL);
//trackbar
createTrackbar("Min Threshold:",window_name, &lowThreshold, max_lowThreshold,CannyThreshold);
//detection of edges
CannyThreshold(0,0);
cv::waitKey(300000);
return EXIT_SUCCESS;
}
Source Image where I want to blur only edges
あなたの助けやアドバイスのために皆のためのビッグ感謝。
あなたのコードの画像へのリンクを投稿しないでください、私たちはあなたの問題を再現するテキストとしてのコードを必要と – EdChum
「結果が悪いですが、」何の適切な説明ではありません。我々は入力を知らないので、どのように出力を判断することができますか? – Piglet