Tôi muốn theo dõi một chấm sáng laser (trên tường) với webcam và tôi đang sử dụng openCV để thực hiện tác vụ này. ai có thể đề nghị tôi một cách để làm điều đó với C + +.Phát hiện ánh sáng laser với OpenCV và C++
Cảm ơn bạn!
Tôi muốn theo dõi một chấm sáng laser (trên tường) với webcam và tôi đang sử dụng openCV để thực hiện tác vụ này. ai có thể đề nghị tôi một cách để làm điều đó với C + +.Phát hiện ánh sáng laser với OpenCV và C++
Cảm ơn bạn!
Bạn có ba tùy chọn tùy thuộc vào độ ổn định của nền và những thứ bạn muốn làm với hình ảnh.
Bạn có thể làm cho hình ảnh của bạn tối đến mức thứ duy nhất bạn có thể thấy là điểm laser. Bạn có thể làm điều này bằng cách đóng màng ngăn và/hoặc giảm thời gian cửa trập. Ngay cả với webcam giá rẻ, điều này thường có thể được thực hiện trong trình điều khiển. Một khi bạn đã hoàn thành công việc tìm điểm laser rất dễ dàng. Bạn làm cho hình ảnh càng tối càng tốt bởi vì thường là điểm mà tia laser chiếu sáng quá sáng để máy ảnh có thể chụp được. Điều này có nghĩa là (như bạn đã trải qua) rằng bạn không thể phân biệt được giữa chấm laser ánh sáng và các vật thể ánh sáng khác trong hình ảnh. Bằng cách làm cho nó tối hơn bạn bây giờ có thể làm điều này.
Nếu bạn có cách sử dụng khác cho hình ảnh của mình (hiển thị nó cho mọi người) và nền của bạn ổn định, bạn cũng có thể sử dụng trung bình của một vài hình ảnh video cuối cùng làm "nền" và sau đó tìm vị trí sự khác biệt giữa nền đó và hình ảnh mới nhất. Đây thường là nơi laser được chỉ (một lần nữa, nếu nền của bạn đủ ổn định).
Cuối cùng, nếu nền của bạn không ổn định và bạn không muốn làm cho hình ảnh của bạn trở nên tối, lựa chọn cuối cùng của bạn là tìm tất cả các điểm ảnh sáng và sáng hơn trong kênh màu đỏ so với màu xanh lá cây và màu xanh dương (nếu bạn đang sử dụng laser đỏ). Hệ thống này sẽ vẫn bị phân tâm bởi các đốm trắng, nhưng không nhiều như chỉ tìm các điểm sáng. Nếu trung tâm của điểm trỏ laser của bạn thực sự hiển thị như màu trắng sáng bất kể màu laser thì kỹ thuật này sẽ cho phép bạn tìm "vòng" xung quanh điểm sáng này (phần bên ngoài của điểm mà laser không sáng như nó nằm ở trung tâm sao cho nó xuất hiện với màu sắc thực tế của laser trong hình ảnh). Sau đó bạn có thể sử dụng đơn giản morphological operations, (có thể là closing là đủ) để điền vào các vòng kết nối này.
Tôi nghĩ rằng tôi nên thử hai lựa chọn đầu tiên và dường như có thể :). Cảm ơn nhiều. – Keshan
Giả sử bạn sử dụng tia laser thuộc một trong các màu sau: đỏ, xanh lục, xanh lam. Nếu chấm laser xuất hiện rất tươi sáng (ít nhất là trong một kênh, ví dụ như màu đỏ) thì chỉ cần làm nổi bật hình ảnh/kênh ở mức greyvalue 200, sẽ để lại cho bạn một vài ứng cử viên cho ánh sáng laser. Nếu các kênh khác có màu tối (er) trong khu vực này, thì bạn biết đó là một màu sáng của màu sắc phù hợp. Một chút lọc theo kích cỡ, và bạn có cơ hội tìm kiếm vị trí.
cảm ơn cho trả lời tôi có một bức tường và nó đang được chiếu như vậy, khi tôi treshold hình ảnh và tìm kiếm các kênh màu đỏ đôi khi màu đỏ trong bề mặt dự kiến có thể gây ra một số rắc rối. – Keshan
Nếu bạn gắn bộ lọc IR trên webcam, phép chiếu của bạn sẽ không được chọn, làm cho việc phát hiện điểm laser dễ dàng hơn nhiều (sử dụng phép trừ nền đơn giản v.v ...) Giả sử con trỏ laser phát ra ánh sáng hồng ngoại ...
thử Tạo mẫu máy. đầu tiên bạn "trỏ con trỏ" đến một nơi cụ thể để đền có thể được thực hiện. Sau đó, bạn chỉ cần tìm nó.
Hoặc, như jilles de wit đã nói, bạn có thể lấy sự khác biệt của 2 khung hình cuối cùng, có thể sự khác biệt sẽ chỉ cho bạn con trỏ.
Chuyển đổi 2 khung hình cuối cùng làm thang màu xám, sau đó áp dụng hàm SUB.
Như được đề xuất trong các câu trả lời khác, việc tìm kiếm màu có thể là một ý tưởng hay. Bạn nên cân nhắc tìm một dải màu cụ thể. Cách tốt nhất để làm điều này là chuyển đổi hình ảnh sang không gian màu HSL hoặc HSV.
cv::cvtColor(src, hsv, COLOR_BGR2HSV);
Thông tin thêm về Wikipedia.
Sau đó, bạn có ba kênh: màu (= màu), độ bão hòa và độ sáng (hoặc giá trị).
Với cv::inRange(hsv, cv::Scalar(159, 135, 165), cv::Scalar(179, 255, 200), inRange);
giờ đây bạn có thể tạo hình ảnh Đen trắng, hiển thị những pixel nào nằm trong dải màu. Các vô hướng là các giá trị thấp và cao cho mỗi kênh.
Trong ví dụ này, bạn sẽ nhận được điểm ảnh với một màu giữa 159 và 179 (màu sắc), độ bão hòa giữa 135 và 255 và giá trị giữa 165 và 200.
Có lẽ điều này có thể cải thiện theo dõi của bạn.
Làm thế nào về mã này
https://www.youtube.com/watch?v=MKUWnz_obqQ
https://github.com/niitsuma/detect_laser_pointer
Trong mã này, quan sát màu HSV được so sánh với màu đã đăng ký sử dụng thử nghiệm t vuông Hotelling của
Có thể sử dụng một số loại bộ lọc ở phía trước webcam nếu các bộ lọc đó là gì? – Keshan
Thực tế là nguồn ánh sáng là một laser thực sự quan trọng đối với bạn, hoặc bạn chỉ sử dụng một nguồn sáng vì đó là một cách thuận tiện để tạo một chấm sáng? Đó là, bạn có lý do nào để quan tâm rằng nguồn là đơn sắc và pha phù hợp? Nếu vậy, các tính chất quang học của bề mặt mà dấu chấm được chiếu lên (độ phẳng, vv ...) là gì? – dmckee
Bạn có thể quét hình ảnh cho khu vực nhỏ với thành phần màu đỏ dễ thấy hơn so với khu vực lân cận không? – Dialecticus