Như một loại "dự án nghỉ" tôi đang chơi xung quanh với OpenCV và muốn phát hiện và đo lường nội dung.OpenCV C++/Obj-C: Phát hiện đối tượng thích hợp
công việc hiện tại (giai đoạn đầu - phát hiện):
- Chuyển đổi sang dạng grayscale (cv :: cvtColor)
- Apply ngưỡng thích nghi (cv :: adaptiveThreshold)
- Áp dụng phát hiện cạnh khôn ngoan (cv: : Canny)
- đường nét Tìm (cv :: findContours)
kết quả của tôi là kinda crappy và tôi không chắc chắn là những gì righ t hướng đi. Tôi đã có cvBlob làm việc theo thiết lập hiện tại của tôi (OSX 10.7.2, Xcode 4.2.1) là một cách tốt hơn để đi? Nếu vậy, làm thế nào tôi có thể thực hiện nó đúng cách?
Hoặc tôi có cần trừ số liệu nền trước không? Tôi cố gắng đó nhưng đã không thể tìm thấy đường nét sau
Dưới đây là hình ảnh của tôi:
Và đó là đầu ra của tôi, khi tôi vẽ đường viền của tôi trở lại thành hình ảnh đầu tiên:
CẬP NHẬT
Tôi nhận được nó hoạt động trong chương trình của tôi và đầu ra của tôi trông hơi khác một chút ...
- (IBAction)processImage:(id)sender
{
cv::Mat forground = [[_inputView image] CVMat];
cv::Mat result = [self isolateBackground:forground];
[_outputView setImage:[NSImage imageWithCVMat:result]];
}
- (cv::Mat)isolateBackground:(cv::Mat &)_image
{
int rh = 255, rl = 100, gh = 255, gl = 0, bh = 70, bl = 0;
cv::cvtColor(_image, _image, CV_RGB2HSV_FULL);
cv::Mat element = getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5));
cv::Mat bgIsolation;
cv::inRange(_image, cv::Scalar(bl, gl, rl), cv::Scalar(bh, gh, rh), bgIsolation);
bitwise_not(bgIsolation, bgIsolation);
erode(bgIsolation, bgIsolation, cv::Mat());
dilate(bgIsolation, bgIsolation, element);
return bgIsolation;
}
Cảm ơn rất nhiều! Bạn có thể xem mã của tôi không? – dom
@moosgummi Lý do bạn nhận được một đầu ra khác nhau là vì bạn đang chuyển sang không gian màu HSV. Ngưỡng của tôi là dành cho không gian RGB. Bạn có thể sử dụng HSV, nhưng bạn sẽ cần phải tìm các phạm vi thích hợp cho không gian đó. Bạn có thể thêm chuyển đổi màu đó vào ứng dụng mẫu của tôi và thử nó. Tôi tưởng tượng bạn sẽ chỉ cần lo lắng về các kênh Hue và Saturation vì kênh Value không chứa bất kỳ thông tin màu nào (tức là, phạm vi Value sẽ bị bỏ hoang [0, 255]). Hy vọng rằng sẽ giúp! – mevatron
Ah ok, vì vậy nó sẽ làm việc tốt hơn trong RGB?bl, gl và rl là các giá trị xanh lam, xanh lục và đỏ. Tôi có đúng không? – dom