我正在使用信号量解决生产者 - 消费者问题以及其他条件。例如:消费者无法读取缓冲区,直到其中至少有3个元素。我的问题是:这些条件是否可以在其他信号量上仅使用down()和up()操作轻松表达?要指定:我使用的信号量来自POSIX< semaphore.h>。它们不支持负信号量值。
到目前为止,我提出了这个问题:
private void detectColoredBlob () {
Mat hsvImage = new Mat();
Imgproc.cvtColor(rgbaFrame, hsvImage, Imgproc.COLOR_RGB2HSV_FULL);
Mat maskedImage = new Mat();
Scalar lowerThreshold = new Scalar(100, 120, 120);
Scalar upperThreshold = new Scalar(179, 255, 255);
Core.inRange(hsvImage, lowerThreshold, upperThreshold, maskedImage);
Mat dilatedMat= new Mat();
//List<MatOfPoint> contours = new ArrayList<>();
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Mat outputHierarchy = new Mat();
Imgproc.dilate(maskedImage, dilatedMat, new Mat() );
Imgproc.findContours(dilatedMat, contours, outputHierarchy, Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);
Log.i(TAG, "IPAPP detectColoredBlob() outputHierarchy " + outputHierarchy.toString());
/*for ( int contourIndex=0; contourIndex < contours.size(); contourIndex++ ) {
//if(contours.get(contourIndex).size()>100) { //ERROR The operator > is undefined for the argument type(s) Size, int
Imgproc.drawContours ( rgbaFrame, contours, contourIndex, new Scalar(0, 255, 0), 4);
//}
}*/
Bitmap bitmap = Bitmap.createBitmap(rgbaFrame.rows(), rgbaFrame.cols(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(maskedImage, bitmap);
imageView.setImageBitmap(bitmap);
}
它有效,但消费者有时间,他只花时间发现他什么也做不了。我们可以避免这种情况吗?
感谢您的帮助!