2
的座標,我從紅僅由下面的算法來實現過濾的輸出如下:OpenCV中得到紅只有矩形區域
cv::Mat findColor(const cv::Mat & inputBGRimage, int rng=20)
{
// Make sure that your input image uses the channel order B, G, R (check not implemented).
cv::Mat mt1, mt2;
cv::Mat input = inputBGRimage.clone();
cv::Mat imageHSV; //(input.rows, input.cols, CV_8UC3);
cv::Mat imgThreshold, imgThreshold0, imgThreshold1; //(input.rows, input.cols, CV_8UC1);
assert(! input.empty());
// blur image
cv::blur(input, input, Size(11, 11));
// convert input-image to HSV-image
cv::cvtColor(input, imageHSV, cv::COLOR_BGR2HSV);
// In the HSV-color space the color 'red' is located around the H-value 0 and also around the
// H-value 180. That is why you need to threshold your image twice and the combine the results.
cv::inRange(imageHSV, cv::Scalar(H_MIN, S_MIN, V_MIN), cv::Scalar(H_MAX, S_MAX, V_MAX), imgThreshold0);
if (rng > 0)
{
// cv::inRange(imageHSV, cv::Scalar(180-rng, 53, 185, 0), cv::Scalar(180, 255, 255, 0), imgThreshold1);
// cv::bitwise_or(imgThreshold0, imgThreshold1, imgThreshold);
}
else
{
imgThreshold = imgThreshold0;
}
// cv::dilate(imgThreshold0, mt1, Mat());
// cv::erode(mt1, mt2, Mat());
return imgThreshold0;
}
這裏是輸出:
我想檢測矩形的四個座標。正如你所看到的,輸出並不完美,我之前使用cv::findContours
與cv::approxPolyDP
一起使用,但它不再有效。
有沒有辦法,我可以申請輸入圖像(除模糊,擴張,侵蝕)的任何過濾器進行處理的圖像更好?
有什麼建議嗎?
更新時間:
當我使用findContours
這樣的:
findContours(src, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
double largest_area = 0;
for(int i = 0; i < contours.size(); i++) { // get the largest contour
area = fabs(contourArea(contours[i]));
if(area >= largest_area) {
largest_area = area;
largestContours.clear();
largestContours.push_back(contours[i]);
}
}
if(largest_area > 5000) {
cv::approxPolyDP(cv::Mat(largestContours[0]), approx, 100, true);
cout << approx.size() << endl; /* ALWAYS RETURN 2 ?!? */
}
像預期的那樣approxPolyDP
不工作。
有沒有辦法使用RotatedRect檢測4個點的座標? – vitozev
@unixarmy - 您可以使用'findContours'並使用'CV_CHAIN_APPROX_SIMPLE'標誌。給定一個直立的矩形形狀,這應該導致在形狀中檢測到4個點,對應於角點。請參閱:http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html#findcontours – rayryeng
rayryeng建議可能實際上可以解決您的問題。 – Aristu