프로젝트에 도움이 필요합니다. 디스크에서 컬러 이미지 (원본 이미지)를 읽었으며이 작업에서는 Canny 함수가이 이미지의 가장자리를 감지하는 경우에만이 이미지에 흐림 효과를 적용합니다. 따라서 첨부 된 이미지 (상단 왼쪽 이미지 - 에지 이미지)에서 볼 수 있듯이 가장자리 감지는 문제가 없습니다. 관련 질문 this 및 this의 4 단계를 적용했습니다.Cv2 :: Mat 이미지 만 흐리게 처리하는 방법 (Canny 함수는 OpenCV로이 이미지의 가장자리를 감지합니다)
첨부 된 이미지에서 볼 수있는 것처럼 1-3 단계가 정확합니다. 첫 번째 이미지는 감지 된 가장자리를 표시하고 두 번째 이미지는 확장 된 이전 이미지를 표시하고 세 번째 이미지는 흐린 두 번째 이미지를 표시하고 소스 이미지는이 이미지에 복사합니다. 그러나 마지막 단계에서이 이미지를 최종 이미지 (원본 이미지)에 복사하여 감지 된 가장자리가 흐려 지도록합니다. 그러나 OpenCV 라이브러리에서 copyTo 함수를 사용하면 결과에 그림 결과 (오른쪽 하단 모서리 이미지)에서 볼 수있는 것처럼 Canny 함수가 감지하는 흐려진 가장자리가 없습니다. 내가하는 일을 제발 도와 줄 수 있니? 여러분의 도움과 조언을 위해 모두를 위해
Source Image where I want to blur only edges
#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;
}
는
큰 감사를드립니다.
코드의 이미지에 링크를 게시하지 마십시오, 우리는 문제 – EdChum
을 재현 텍스트로 코드를 필요로 "결과가 나쁘다"더 적절한 설명은 없다. 우리는 입력을 모릅니다. 어떻게 출력을 판단 할 수 있습니까? – Piglet