- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我克隆了 OpenCV Git 存储库:git clone https://github.com/opencv/opencv.git
并没有改变任何东西。
然后我跟着build opencv.js
关于 OpenCV 的逐步文档 https://docs.opencv.org/4.5.2/d4/da1/tutorial_js_setup.html并成功构建了opencv.js
和 tests
用命令
python ./platforms/js/build_js.py build_js --build_test
然后我用一个实时服务器打开了创建的test.html
并看到所有测试均成功:"581 assertions of 581 passed, 0 failed."
但是当我插入内置的 opencv.js
在 <script> </script>
之间标签并使用它,它仍然有效,除了 cv.imread()
.我收到错误消息:`
"Uncaught TypeError: cv.imread is not a function".`
这是代码块:
let canvas = document.getElementById("canvas");
let ctx = canvas.getContext("2d");
let matrix = cv.imread("canvas");
然后我使用了官方的opencv.js 和imread() 工作。然而,问题是 opencv.js 的大小为 7.7 mb,因为它包含了 OpenCV 的大部分功能,而我只需要一些核心和图像处理功能。
如何将 imread() 包含在构建中?到目前为止我找不到解决方案。我只找到了构建白名单:它位于 OpenCV 存储库中,名称为 opencv_js.config.py,包括以下内容。知道如何将 imread() 包含在构建中吗?因为 OpenCV JavaScript 文档几乎在每个示例中都使用 imread(),所以应该有一种简单的方法来包含它。
# Classes and methods whitelist
core = {
'': [
'absdiff', 'add', 'addWeighted', 'bitwise_and', 'bitwise_not', 'bitwise_or', 'bitwise_xor', 'cartToPolar',
'compare', 'convertScaleAbs', 'copyMakeBorder', 'countNonZero', 'determinant', 'dft', 'divide', 'eigen',
'exp', 'flip', 'getOptimalDFTSize','gemm', 'hconcat', 'inRange', 'invert', 'kmeans', 'log', 'magnitude',
'max', 'mean', 'meanStdDev', 'merge', 'min', 'minMaxLoc', 'mixChannels', 'multiply', 'norm', 'normalize',
'perspectiveTransform', 'polarToCart', 'pow', 'randn', 'randu', 'reduce', 'repeat', 'rotate', 'setIdentity', 'setRNGSeed',
'solve', 'solvePoly', 'split', 'sqrt', 'subtract', 'trace', 'transform', 'transpose', 'vconcat',
'setLogLevel', 'getLogLevel',
],
'Algorithm': [],
}
imgproc = {'': ['Canny', 'GaussianBlur', 'Laplacian', 'HoughLines', 'HoughLinesP', 'HoughCircles', 'Scharr','Sobel', \
'adaptiveThreshold','approxPolyDP','arcLength','bilateralFilter','blur','boundingRect','boxFilter',\
'calcBackProject','calcHist','circle','compareHist','connectedComponents','connectedComponentsWithStats', \
'contourArea', 'convexHull', 'convexityDefects', 'cornerHarris','cornerMinEigenVal','createCLAHE', \
'createLineSegmentDetector','cvtColor','demosaicing','dilate', 'distanceTransform','distanceTransformWithLabels', \
'drawContours','ellipse','ellipse2Poly','equalizeHist','erode', 'filter2D', 'findContours','fitEllipse', \
'fitLine', 'floodFill','getAffineTransform', 'getPerspectiveTransform', 'getRotationMatrix2D', 'getStructuringElement', \
'goodFeaturesToTrack','grabCut','initUndistortRectifyMap', 'integral','integral2', 'isContourConvex', 'line', \
'matchShapes', 'matchTemplate','medianBlur', 'minAreaRect', 'minEnclosingCircle', 'moments', 'morphologyEx', \
'pointPolygonTest', 'putText','pyrDown','pyrUp','rectangle','remap', 'resize','sepFilter2D','threshold', \
'undistort','warpAffine','warpPerspective','warpPolar','watershed', \
'fillPoly', 'fillConvexPoly', 'polylines',
],
'CLAHE': ['apply', 'collectGarbage', 'getClipLimit', 'getTilesGridSize', 'setClipLimit', 'setTilesGridSize'],
'segmentation_IntelligentScissorsMB': [
'IntelligentScissorsMB',
'setWeights',
'setGradientMagnitudeMaxLimit',
'setEdgeFeatureZeroCrossingParameters',
'setEdgeFeatureCannyParameters',
'applyImage',
'applyImageFeatures',
'buildMap',
'getContour'
],
}
objdetect = {'': ['groupRectangles'],
'HOGDescriptor': ['load', 'HOGDescriptor', 'getDefaultPeopleDetector', 'getDaimlerPeopleDetector', 'setSVMDetector', 'detectMultiScale'],
'CascadeClassifier': ['load', 'detectMultiScale2', 'CascadeClassifier', 'detectMultiScale3', 'empty', 'detectMultiScale'],
'QRCodeDetector': ['QRCodeDetector', 'decode', 'decodeCurved', 'detect', 'detectAndDecode', 'detectMulti', 'setEpsX', 'setEpsY']}
video = {'': ['CamShift', 'calcOpticalFlowFarneback', 'calcOpticalFlowPyrLK', 'createBackgroundSubtractorMOG2', \
'findTransformECC', 'meanShift'],
'BackgroundSubtractorMOG2': ['BackgroundSubtractorMOG2', 'apply'],
'BackgroundSubtractor': ['apply', 'getBackgroundImage']}
dnn = {'dnn_Net': ['setInput', 'forward'],
'': ['readNetFromCaffe', 'readNetFromTensorflow', 'readNetFromTorch', 'readNetFromDarknet',
'readNetFromONNX', 'readNet', 'blobFromImage']}
features2d = {'Feature2D': ['detect', 'compute', 'detectAndCompute', 'descriptorSize', 'descriptorType', 'defaultNorm', 'empty', 'getDefaultName'],
'BRISK': ['create', 'getDefaultName'],
'ORB': ['create', 'setMaxFeatures', 'setScaleFactor', 'setNLevels', 'setEdgeThreshold', 'setFirstLevel', 'setWTA_K', 'setScoreType', 'setPatchSize', 'getFastThreshold', 'getDefaultName'],
'MSER': ['create', 'detectRegions', 'setDelta', 'getDelta', 'setMinArea', 'getMinArea', 'setMaxArea', 'getMaxArea', 'setPass2Only', 'getPass2Only', 'getDefaultName'],
'FastFeatureDetector': ['create', 'setThreshold', 'getThreshold', 'setNonmaxSuppression', 'getNonmaxSuppression', 'setType', 'getType', 'getDefaultName'],
'AgastFeatureDetector': ['create', 'setThreshold', 'getThreshold', 'setNonmaxSuppression', 'getNonmaxSuppression', 'setType', 'getType', 'getDefaultName'],
'GFTTDetector': ['create', 'setMaxFeatures', 'getMaxFeatures', 'setQualityLevel', 'getQualityLevel', 'setMinDistance', 'getMinDistance', 'setBlockSize', 'getBlockSize', 'setHarrisDetector', 'getHarrisDetector', 'setK', 'getK', 'getDefaultName'],
# 'SimpleBlobDetector': ['create'],
'KAZE': ['create', 'setExtended', 'getExtended', 'setUpright', 'getUpright', 'setThreshold', 'getThreshold', 'setNOctaves', 'getNOctaves', 'setNOctaveLayers', 'getNOctaveLayers', 'setDiffusivity', 'getDiffusivity', 'getDefaultName'],
'AKAZE': ['create', 'setDescriptorType', 'getDescriptorType', 'setDescriptorSize', 'getDescriptorSize', 'setDescriptorChannels', 'getDescriptorChannels', 'setThreshold', 'getThreshold', 'setNOctaves', 'getNOctaves', 'setNOctaveLayers', 'getNOctaveLayers', 'setDiffusivity', 'getDiffusivity', 'getDefaultName'],
'DescriptorMatcher': ['add', 'clear', 'empty', 'isMaskSupported', 'train', 'match', 'knnMatch', 'radiusMatch', 'clone', 'create'],
'BFMatcher': ['isMaskSupported', 'create'],
'': ['drawKeypoints', 'drawMatches', 'drawMatchesKnn']}
photo = {'': ['createAlignMTB', 'createCalibrateDebevec', 'createCalibrateRobertson', \
'createMergeDebevec', 'createMergeMertens', 'createMergeRobertson', \
'createTonemapDrago', 'createTonemapMantiuk', 'createTonemapReinhard', 'inpaint'],
'CalibrateCRF': ['process'],
'AlignMTB' : ['calculateShift', 'shiftMat', 'computeBitmaps', 'getMaxBits', 'setMaxBits', \
'getExcludeRange', 'setExcludeRange', 'getCut', 'setCut'],
'CalibrateDebevec' : ['getLambda', 'setLambda', 'getSamples', 'setSamples', 'getRandom', 'setRandom'],
'CalibrateRobertson' : ['getMaxIter', 'setMaxIter', 'getThreshold', 'setThreshold', 'getRadiance'],
'MergeExposures' : ['process'],
'MergeDebevec' : ['process'],
'MergeMertens' : ['process', 'getContrastWeight', 'setContrastWeight', 'getSaturationWeight', \
'setSaturationWeight', 'getExposureWeight', 'setExposureWeight'],
'MergeRobertson' : ['process'],
'Tonemap' : ['process' , 'getGamma', 'setGamma'],
'TonemapDrago' : ['getSaturation', 'setSaturation', 'getBias', 'setBias', \
'getSigmaColor', 'setSigmaColor', 'getSigmaSpace','setSigmaSpace'],
'TonemapMantiuk' : ['getScale', 'setScale', 'getSaturation', 'setSaturation'],
'TonemapReinhard' : ['getIntensity', 'setIntensity', 'getLightAdaptation', 'setLightAdaptation', \
'getColorAdaptation', 'setColorAdaptation']
}
aruco = {'': ['detectMarkers', 'drawDetectedMarkers', 'drawAxis', 'estimatePoseSingleMarkers', 'estimatePoseBoard', 'estimatePoseCharucoBoard', 'interpolateCornersCharuco', 'drawDetectedCornersCharuco'],
'aruco_Dictionary': ['get', 'drawMarker'],
'aruco_Board': ['create'],
'aruco_GridBoard': ['create', 'draw'],
'aruco_CharucoBoard': ['create', 'draw'],
'aruco_DetectorParameters': ['create']
}
calib3d = {'': ['findHomography', 'calibrateCameraExtended', 'drawFrameAxes', 'estimateAffine2D', \
'getDefaultNewCameraMatrix', 'initUndistortRectifyMap', 'Rodrigues', \
'solvePnP', 'solvePnPRansac', 'solvePnPRefineLM']}
white_list = makeWhiteList([core, imgproc, objdetect, video, dnn, features2d, photo, aruco, calib3d])
最佳答案
我遇到了同样的问题。我使用 emscripten 从源代码编译 opencv,它没有任何错误地完成,但是当我试图在浏览器中加载它时,它根本不起作用。问题已通过旧版本的 emscripten 解决。
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk/
./emsdk install 1.39.15
./emsdk activate 1.39.15
source ./emsdk_env.sh
git clone https://github.com/opencv/opencv.git
emcmake python ./opencv/platforms/js/build_js.py build_wasm --build_wasm
我浏览了所有较新的版本,但 1.39.15 是对我有用的最新版本。通过这种方式,我将 opencv.js 文件减小到 1.7MB。
关于javascript - 构建 opencv.js 时如何包含 cv.imread()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67190799/
我正在使用并熟悉 cv2 ,今天我正在尝试使用 skimage . 我试图使用 skimage 读取图像和 cv2 .似乎他们都完美地阅读了图像。但是当我绘制图像的直方图但读取不同的库( skimag
scipy.ndimage.imread 刚刚在 scipy 中被弃用,所以我直接将代码切换为使用 pyplot - 但结果并不相同。我正在为 keras 中内置的学习算法导入图像 - 我以为这将是
我已经成功安装了 scipy、numpy 和 pillow,但是我得到如下错误 ImportError: cannot import name 'imread' 最佳答案 您是否遵循相同的步骤? im
这是我的代码中出现问题的部分。它应该计算图片中绿色像素的数量: img = Image.open('path.tif') BLACK_MIN = np.array([0, 20, 20], np.ui
我正在尝试读取未更改格式的图像,进行一些操作并将其转换回彩色格式 im = cv2.imread(fname,cv2.IMREAD_UNCHANGED) # shape(240,240,4) ....
我在 Ubuntu 14.04 机器上安装了最新的 Octave。但是,当我尝试运行 imread 命令时,它显示以下错误消息: octave:12> imread('newfile.png') er
我一直致力于检测离线手写签名的项目。我遇到了一个基本问题。我的程序无法使用 imread() 函数。它没有显示任何错误,但也没有加载图像。如果我检查图像,它会显示我指定的错误消息。我正在使用 Open
我在 opencv 函数中遇到问题。我可以用 IplImage* img = CvLoadImage("2_DeepViewOutput.png"); 但是我不能用 Mat img = imread(
我使用 visual studio 2013 和 opencv。我运行一个简单的代码来读取图像并显示它。我将图像从 Donloads 文件添加到我的项目的资源文件中。当我运行下面的代码时,image.
imread 创建的默认像素类型是什么?我测试了不同的图像,它们都给我未签名的具有不同 channel 的字符。如果我不问的话,imread 会用 signed char 创建一个像素类型吗明确? c
opencv读取图像为b,g,r方法,比如 img = cv2.imread("xx.jpg") cv2.imshow("xx",img)
我有一张从网上下载的图片(验证码)。 当我加载到 opencv 时,它似乎失去了它的属性,或者只是将透明背景与深色/黑色混合: 目前代码除了再次加载一个文字什么都不做: captchaImg = cv
我在 Ubuntu 上使用 Python 2.7,并且在开始为我的算法课分配作业之前我正在尝试使用图像。我已经下载了 numpy、scipy 和 skimage 包,但我不断收到“imread”、“t
我正在使用 plt.imread 来读取大的 .tiff 图像。由于尺寸较大,我只想选择要加载的图像的一部分。我想做类似的事情: plt.imread(filename, [s1:s2, r1:r2]
我在VS2010和Xcode 4.2上都遇到了OpenCV 2.3.1和2.4跨平台错误 如果我在将图像的路径作为绝对路径使用的同时使用cv::imread,那么它将起作用。如果这是相对路径,则不起作
我在尝试弄清楚如何将数据从cv.imread()发送到我的机器学习模型时遇到了麻烦。 从我的图像读取功能中,我得到一个numpy数组的列表,其中包含维度为(256、256、3)的图像。 # image
正如标题所说。我尝试使用 argv 和绝对路径加载图像并且它有效,但使用相对路径它没有。该图像与可执行文件位于同一目录中。我在 Windows 7 64 位上使用 visual studio 2013
文件名为 D:\remedi\Exercise\Xray\objects\object (2).png 并且有很多文件,例如object (3).png、object (4).png、object (
在Java中我想读取图像。为此,我使用了以下代码: BufferedReader br = ImageIO.read(new File('a.png')); 它可以工作。但是br中的值是这样的:-16
我正在使用 OpenCV 2.4.7 在 VS2012 上编译一个简单的项目。 所以当我这样做的时候: cv::Mat img = cv::imread("C:\lena.jpg",1); 然后我寻找
我是一名优秀的程序员,十分优秀!