int main(){ Mat image=imread("/home/jiaqi/Pictures/images/building.jpg",0); namedWindow("Image"); imshow("Image",image); MorphoFeatures morpho; morpho.setThreshold(40); Mat edges; edges=morpho.getEdges(image); namedWindow("Edge Image"); imshow("Edge Image",edges); morpho.setThreshold(-1); Mat corners; corners= morpho.getCorners(image); morphologyEx(corners,corners,MORPH_TOPHAT,Mat()); cv::threshold(corners, corners, 40, 255, THRESH_BINARY_INV); namedWindow("Corners"); imshow("Corners",corners); morpho.drawOnImage(corners,image); namedWindow("Corners on Image"); imshow("Corners on Image",image); waitKey(0); return 0; }
int main() { // Detect corners and edges on image cv::Mat image = cv::imread("opencv-corner-detection-sample.jpg", 0); // Define object for detecting corners MorphoFeatures morpho; morpho.setThreshold(40); // Get the edges cv::Mat edges; edges = morpho.getEdges(image); imshow("Edges", edges); cv::Mat corners; corners = morpho.getCorners(image); // Display the corner on the image imshow("Corners on Image", corners); // Draw corners morpho.drawOnImage(corners, image); imshow("Detected corners", image); cv::waitKey(0); return 0; }
int main() { cv::Mat image = cv::imread("building.jpg"); cv::namedWindow("Image"); cv::imshow("Image", image); MorphoFeatures morpho; morpho.setThreshold(40); Mat edges; edges = morpho.getEdges(image); namedWindow("Hi"); imshow("Hi", edges); cv::waitKey(); }
void ImagePro::on_btnDetectEdgeMorph_clicked() { MorphoFeatures morpho; morpho.setThreshold(40); // Get the edges cv::Mat tmpImg; cv::cvtColor(_img, tmpImg, CV_RGB2GRAY); cv::Mat edges; edges= morpho.getEdges(tmpImg); cv::namedWindow("edge dection: Morphology"); cv::imshow("edge dection: Morphology",edges); cv::Mat corners; corners= morpho.getCorners(tmpImg); cv::Mat tmp2; tmp2 = _img.clone(); morpho.drawOnImage(corners,tmpImg); cv::namedWindow("corner dection: Morphology"); cv::imshow("corner dection: Morphology",tmpImg); }
int main() { // Read input image cv::Mat image= cv::imread(IMAGE_FOLDER "/building.jpg",0); if (!image.data) return 0; // resize for book printing cv::resize(image, image, cv::Size(), 0.7, 0.7); // Display the image cv::namedWindow("Image"); cv::imshow("Image",image); // Create the morphological features instance MorphoFeatures morpho; morpho.setThreshold(40); // Get the edges cv::Mat edges; edges= morpho.getEdges(image); // Display the edge image cv::namedWindow("Edge Image"); cv::imshow("Edge Image",edges); // Get the corners morpho.setThreshold(-1); cv::Mat corners; corners= morpho.getCorners(image); cv::morphologyEx(corners,corners,cv::MORPH_TOPHAT,cv::Mat()); cv::threshold(corners, corners, 35, 255, cv::THRESH_BINARY_INV); // Display the corner image cv::namedWindow("Corner Image"); cv::imshow("Corner Image",corners); // Display the corner on the image morpho.drawOnImage(corners,image); cv::namedWindow("Corners on Image"); cv::imshow("Corners on Image",image); // Read and display image of square image= cv::imread(IMAGE_FOLDER "/square.bmp",0); cv::namedWindow("Square Image"); cv::imshow("Square Image",image); // Creating the cross-shaped structuring element cv::Mat cross(5,5,CV_8U,cv::Scalar(0)); for (int i=0; i<5; i++) { cross.at<uchar>(2,i)= 1; cross.at<uchar>(i,2)= 1; } // Dilate with a cross cv::Mat result; cv::dilate(image,result,cross); // Display the result cv::namedWindow("Dilated square with cross"); cv::imshow("Dilated square with cross",result); // Creating the diamond-shaped structuring element cv::Mat diamond(5,5,CV_8U,cv::Scalar(1)); diamond.at<uchar>(0,0)= 0; diamond.at<uchar>(0,1)= 0; diamond.at<uchar>(1,0)= 0; diamond.at<uchar>(4,4)= 0; diamond.at<uchar>(3,4)= 0; diamond.at<uchar>(4,3)= 0; diamond.at<uchar>(4,0)= 0; diamond.at<uchar>(4,1)= 0; diamond.at<uchar>(3,0)= 0; diamond.at<uchar>(0,4)= 0; diamond.at<uchar>(0,3)= 0; diamond.at<uchar>(1,4)= 0; // Erode with a diamond cv::Mat result2; cv::erode(result,result2,diamond); // Display the result cv::namedWindow("Eroded square with diamond"); cv::imshow("Eroded square with diamond",result2); // Combine the images into one cv::Mat final(100,300,CV_8U); cv::Mat window= final(cv::Rect(0,0,100,100)); image.copyTo(window); window= final(cv::Rect(100,0,100,100)); result.copyTo(window); window= final(cv::Rect(200,0,100,100)); result2.copyTo(window); // Display the combined result cv::namedWindow("Combined"); cv::imshow("Combined",final); // Save combined result cv::imwrite("squares.bmp",final); cv::waitKey(); return 0; }