diff --git a/test/package.xml b/test/package.xml index ad01150..00a20da 100644 --- a/test/package.xml +++ b/test/package.xml @@ -4,30 +4,18 @@ 0.0.0 The test package - - - - thomas + Your Name + BSD - - - - - TODO - - - - - @@ -48,12 +36,25 @@ + catkin + roscpp + rospy + std_msgs + sensor_msgs + image_transport + cv_bridge + opencv + roscpp + rospy + std_msgs + sensor_msgs + image_transport + cv_bridge + opencv - - diff --git a/test/src/QRcode.cpp b/test/src/QRcode.cpp index 4dab3cf..cfd7c94 100644 --- a/test/src/QRcode.cpp +++ b/test/src/QRcode.cpp @@ -1,56 +1,69 @@ #include -#include #include #include #include #include -void imageCallback(const sensor_msgs::ImageConstPtr& msg) +void processFrame(const cv::Mat& frame) { - try + // Create ArUco marker detector + cv::Ptr dictionary = + cv::aruco::getPredefinedDictionary(cv::aruco::DICT_4X4_50); // Change dictionary type here + std::vector markerIds; + std::vector> markerCorners; + + // Detect markers in the image + cv::aruco::detectMarkers(frame, dictionary, markerCorners, markerIds); + + // Draw detected markers + if (!markerIds.empty()) { - // Convert ROS image message to OpenCV image - cv::Mat frame = cv_bridge::toCvShare(msg, "bgr8")->image; - - // Create ArUco marker detector - cv::Ptr dictionary = - cv::aruco::getPredefinedDictionary(cv::aruco::DICT_6X6_250); - std::vector markerIds; - std::vector> markerCorners; - - // Detect markers in the image - cv::aruco::detectMarkers(frame, dictionary, markerCorners, markerIds); - - // Draw detected markers - if (!markerIds.empty()) + cv::aruco::drawDetectedMarkers(frame, markerCorners, markerIds); + ROS_INFO("Detected %zu ArUco markers", markerIds.size()); + for (size_t i = 0; i < markerIds.size(); ++i) { - cv::aruco::drawDetectedMarkers(frame, markerCorners, markerIds); - ROS_INFO("Detected %zu ArUco markers", markerIds.size()); + ROS_INFO("Marker ID: %d", markerIds[i]); } - else - { - ROS_INFO("No ArUco markers detected"); - } - - // Display the result - cv::imshow("ArUco Detection", frame); - cv::waitKey(1); } - catch (cv_bridge::Exception& e) + else { - ROS_ERROR("Could not convert from '%s' to 'bgr8'.", msg->encoding.c_str()); + ROS_INFO("No ArUco markers detected"); } + + // Display the result + cv::imshow("ArUco Detection", frame); + cv::waitKey(1); } int main(int argc, char** argv) { ros::init(argc, argv, "qr_code_detector"); ros::NodeHandle nh; - image_transport::ImageTransport it(nh); - image_transport::Subscriber sub = it.subscribe("camera/image", 1, imageCallback); + + cv::VideoCapture cap(0); // Open the default camera + if (!cap.isOpened()) + { + ROS_ERROR("Could not open the camera"); + return -1; + } cv::namedWindow("ArUco Detection"); - ros::spin(); + + while (ros::ok()) + { + cv::Mat frame; + cap >> frame; // Capture a new frame from the camera + + if (frame.empty()) + { + ROS_ERROR("Captured empty frame"); + continue; + } + + processFrame(frame); + ros::spinOnce(); + } + cv::destroyWindow("ArUco Detection"); return 0; -} \ No newline at end of file +}